Sex

package module
v0.4.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 8, 2021 License: MPL-2.0 Imports: 14 Imported by: 2

README

Sex Pistol Icon

Sex Pistol


A Sex web micro framework for GoLang.

Get Started


Install

It is easy, just take that command on your favorite terminal:

$ go get github.com/Plankiton/SexPistol

First Code

Its so easy like that:

package main
import "github.com/Plankiton/SexPistol"
func main() {
    Sex.NewPistol().
    Add("/{name}", func (r Sex.Request) string {
        return Sex.Fmt("Hello, %s", r.PathVars["name"])
    }).
    Run()
}

Too sex no? That code make the same thing what the code above:

Code using default library from Go

package main
import (
    "net/http"
    "fmt"
    "strings"
)

func main() {
    http.HandleFunc("/",func Hello (w http.ResponseWriter, r *http.Request) {
        path := strings.Split(r.URL.Path, "/")

        w.WriteHeader(200)
        w.Write([]byte(fmt.Sprintf(
            "Hello, %s", path[len(path)-1],
        )))
    })

    http.ListenAndServe(":8000", nil)
}

Documentation

Documentation

Index

Constants

View Source
const (
	LogLevelInfo  = "\033[32;1m[info] \033[00m"
	LogLevelWarn  = "\033[33;1m[warn] \033[00m"
	LogLevelError = "\033[31;1m[fail] \033[00m"
)
View Source
const (
	StatusContinue           = 100
	StatusSwitchingProtocols = 101
	StatusProcessing         = 102
	StatusEarlyHints         = 103

	StatusOK                   = 200
	StatusCreated              = 201
	StatusAccepted             = 202
	StatusNonAuthoritativeInfo = 203
	StatusNoContent            = 204
	StatusResetContent         = 205
	StatusPartialContent       = 206
	StatusMultiStatus          = 207
	StatusAlreadyReported      = 208
	StatusIMUsed               = 226

	StatusMultipleChoices  = 300
	StatusMovedPermanently = 301
	StatusFound            = 302
	StatusSeeOther         = 303
	StatusNotModified      = 304
	StatusUseProxy         = 305

	StatusTemporaryRedirect = 307
	StatusPermanentRedirect = 308

	StatusBadRequest                   = 400
	StatusUnauthorized                 = 401
	StatusPaymentRequired              = 402
	StatusForbidden                    = 403
	StatusNotFound                     = 404
	StatusMethodNotAllowed             = 405
	StatusNotAcceptable                = 406
	StatusProxyAuthRequired            = 407
	StatusRequestTimeout               = 408
	StatusConflict                     = 409
	StatusGone                         = 410
	StatusLengthRequired               = 411
	StatusPreconditionFailed           = 412
	StatusRequestEntityTooLarge        = 413
	StatusRequestURITooLong            = 414
	StatusUnsupportedMediaType         = 415
	StatusRequestedRangeNotSatisfiable = 416
	StatusExpectationFailed            = 417
	StatusTeapot                       = 418
	StatusMisdirectedRequest           = 421
	StatusUnprocessableEntity          = 422
	StatusLocked                       = 423
	StatusFailedDependency             = 424
	StatusTooEarly                     = 425
	StatusUpgradeRequired              = 426
	StatusPreconditionRequired         = 428
	StatusTooManyRequests              = 429
	StatusRequestHeaderFieldsTooLarge  = 431
	StatusUnavailableForLegalReasons   = 451

	StatusInternalServerError           = 500
	StatusNotImplemented                = 501
	StatusBadGateway                    = 502
	StatusServiceUnavailable            = 503
	StatusGatewayTimeout                = 504
	StatusHTTPVersionNotSupported       = 505
	StatusVariantAlsoNegotiates         = 506
	StatusInsufficientStorage           = 507
	StatusLoopDetected                  = 508
	StatusNotExtended                   = 510
	StatusNetworkAuthenticationRequired = 511
)

Variables

This section is empty.

Functions

func Copy

func Copy(source interface{}, destine interface{}) error

Sex utility function to make copy of map or struct to another map or struct Required: Destine need to be a pointer Example:

var m struct { Name string `json:"name"` }
j := Dict{
   "name": "Joao",
}
Sex.Copy(j, &m)

func Debug added in v0.4.8

func Debug(v ...interface{})

Debuging stdout display

func Die

func Die(args ...interface{})

Logging error logs with Sex.Logger() and killing the application

func Dief added in v0.3.0

func Dief(args ...interface{})

Logging error logs with Sex.Logger() and killing the application Example:

Dief("%s %+v", "joao", []string{"joao", "maria"})
Dief("%.2f", 409.845)

func Err

func Err(args ...interface{})

Logging error logs with Sex.Logger()

func Errf added in v0.3.0

func Errf(args ...interface{})

Logging error formated logs with Sex.Logger() Example:

Errf("%s %+v", "joao", []string{"joao", "maria"})
Errf("%.2f", 409.845)

func Fmt

func Fmt(s string, v ...interface{}) string

Geting formated string

func FromJSON added in v0.4.8

func FromJSON(encoded []byte, v interface{}) error

FromJSON function thats parse a byte list on a json and write on a variable Required: v needs to be a pointer

func GetEnv

func GetEnv(key string, def string) string

GetEnv function thats get a environment var or default value if var does not exist

func GetPathPattern

func GetPathPattern(t string) string

Function to get regex pattern of a Sex path template Example:

Sex.GetPathPattern("/hello/{name}")

func GetPathVars

func GetPathVars(t string, p string) (map[string]string, error)

Function to get variables of a path using a Sex path template Example:

Sex.GetPathVars("/hello/{name}", "/hello/joao")

func IndexOf added in v0.4.8

func IndexOf(i interface{}, l interface{}) int

IndexOf function to index first ocurrence of string on string slice

func Jsonify

func Jsonify(v interface{}) []byte

Jsonify function thats parse a byte list on a json and write on a variable

func Log

func Log(args ...interface{})

Logging information logs with Sex.Logger()

func Logf added in v0.3.0

func Logf(args ...interface{})

Logging information formated logs with Sex.Logger() Example:

Logf("%s %+v", "joao", []string{"joao", "maria"})
Logf("%.2f", 409.845)

func Merge

func Merge(source interface{}, destine interface{}, override ...bool) (interface{}, error)

Sex utility function to make merge of map or struct and another map or struct Required: Destine need to be a pointer Example:

var m := struct { Name string `json:"name"` } {
    Name: "Joao",
}
j := Dict{
   "idade": "Joao",
   "name": nil,
}
f := Sex.Merge(m, &j)

Merge rules:

If the field on source dont exists on destine it will be created (just if destine are map)
If the field on source exists on destine but are dont seted it will be seted
If the field on source exists on destine but are seted it will not be seted
If override are seted as true, the field on destine will be overrided by source

func RawLog added in v0.4.2

func RawLog(typ string, useCaller bool, args ...interface{})

Logging a raw log

func StatusText

func StatusText(code int) string

StatusText returns a text for the HTTP status code. It returns the empty string if the code is unknown.

func UseLogger added in v0.4.8

func UseLogger(l *Logger)

Set SexPistol logger

func War

func War(args ...interface{})

Logging warning logs with Sex.Logger()

func Warf added in v0.3.0

func Warf(args ...interface{})

Logging warning formated logs with Sex.Logger() Example:

Warf("%s %+v", "joao", []string{"joao", "maria"})
Warf("%.2f", 409.845)

Types

type Bullet

type Bullet struct {
	Message string      `json:"message,omitempty"`
	Type    string      `json:"type,omitempty"`
	Data    interface{} `json:"data,omitempty"`
}

Suggested template for Sex.Json endpoint functions

type Config added in v0.4.8

type Config map[string]Prop

Config is group of properties (Prop)

type Dict

type Dict map[string]interface{}

Dict is dictionary key:value, but key is always string

type Json

type Json interface{}

Json Sex type for json format endpoint outputs

type Logger added in v0.3.0

type Logger struct {
	log.Logger
}

func NewLogger added in v0.4.8

func NewLogger() *Logger

Get SexPistol logger

type Pistol

type Pistol struct {
	*http.ServeMux
	// contains filtered or unexported fields
}

Pistol is the Sex HTTP handler, who are used to setup http server Example:

router := Sex.NewPistol().
   Add("/", func(Sex.Request) string {
      return "Hello World"
   }).
   Run()

func NewPistol added in v0.3.0

func NewPistol() *Pistol

Function thats create a Sex.Pistol and create the init configurations Example:

router := Sex.NewPistol()

func (*Pistol) Add

func (pistol *Pistol) Add(path string, route interface{}, methods ...string) *Pistol

Function to Add endpoints to the Sex.Pistol Server path are the endpoint location route is a void interface thats need to be on next format list:

  • func (http.ResponseWriter, *http.Request)
  • func (Sex.Request) Sex.Response (res, status)
  • func (Sex.Request) string // Or (string, int)
  • func (Sex.Request) []byte // Or ([]byte, int)
  • func (Sex.Request) Sex.Json // Or (Sex.Json, int)

methods are a list of accepted HTTP methods to endpoint Example:

router.Add("/", func(Sex.Request) string {
   return "Hello World"
}, "POST")
router.Add("/ok", func(Sex.Request) Sex.Json, int {
   return map[stirng]bool{
      "ok": true,
   }, 404
})

func (*Pistol) AddPlugin added in v0.4.8

func (pistol *Pistol) AddPlugin(plugin Plugin) *Pistol

Add plugin to Sex Pistol

func (*Pistol) Error added in v0.4.8

func (pistol *Pistol) Error() error

Get Pistol last error

func (*Pistol) GetPath added in v0.4.8

func (pistol *Pistol) GetPath() string

Get Pistol running path

func (*Pistol) GetRoutes added in v0.4.8

func (pistol *Pistol) GetRoutes() Dict

Get Pistol route list

func (*Pistol) Run

func (pistol *Pistol) Run(a ...interface{}) error

Function to execute de Sex.Pistol server Example:

pistol.Run(5000)        // Will run server on port 5000
pistol.Run("/joao")     // will run server on path "/joao"
pistol.Run("/joao", 80) // will run server on path "/joao" and port 80
pistol.Run(80, "/joao") // will run server on path "/joao" and port 80

If you run a Sex Pistol server with $SEX_DEBUG setted as "true" thats function will to log list all Sex endpoints of router

func (*Pistol) ServeHTTP added in v0.3.5

func (pistol *Pistol) ServeHTTP(w http.ResponseWriter, r *http.Request)

Function to make Sex.Pistol a http.Handler

func (*Pistol) SetErr added in v0.4.8

func (pistol *Pistol) SetErr(err error)

Set Pistol last error

type Plugin added in v0.4.8

type Plugin interface {
	Name() string
	Init(*Pistol) (*Pistol, error)
	Root(http.ResponseWriter, *http.Request) (http.ResponseWriter, *http.Request)
}

type Prop

type Prop map[string][]string

Prop are map of properties

func (Prop) Add added in v0.4.8

func (h Prop) Add(key, value string)

Add adds the key, value pair to the header. It appends to any existing values associated with key. The key is case sensitive.

func (Prop) Del added in v0.4.8

func (h Prop) Del(key string)

Del deletes the values associated with key. The key is case sensitive.

func (Prop) Get added in v0.4.8

func (h Prop) Get(key string) string

Get gets the first value associated with the given key. If there are no values associated with the key, Get returns "". It is case sensitive.

func (Prop) Has added in v0.4.8

func (h Prop) Has(key string) bool

Has reports whether h has the provided key defined, even if it's set to 0-length slice.

func (Prop) Set added in v0.4.8

func (h Prop) Set(key, value string)

Set sets the header entries associated with key to the single element value. It replaces any existing values associated with key. The key and value is case sensitive.

func (Prop) Values added in v0.4.8

func (h Prop) Values(key string) []string

Values returns all values associated with the given key. It is case sensitive

type Request

type Request struct {
	http.Request
	PathVars map[string]string
	Conf     Prop
}

Request properties sent by client (*http.Request) with inproviments like path variables and Pistol Route configurations Example:

router.Add("/hello/{name}", func (r Sex.Request) string {
    name := r.PathVars["name"]
    return "Hello "+ name
}

func NewRequest added in v0.4.8

func NewRequest() *Request

Request constructor function

func (*Request) JsonBody

func (self *Request) JsonBody(v interface{}) error

Request function to write Json body on a variable Example:

var data map[string]interface{} // Can be Structs too
r.JsonBody(&data)

func (*Request) RawBody

func (self *Request) RawBody(b *[]byte) error

Request function to write []byte body on a variable Example:

var data []byte
r.RawBody(&data)

type Response

type Response struct {
	http.ResponseWriter
	Headers *http.Header
	Body    []byte
	Status  int
}

Response to make complete response with Cookies, Headers, and all http.ResponseWrite another features

func NewResponse added in v0.4.8

func NewResponse() *Response

Response constructor function

func (*Response) Header added in v0.4.8

func (self *Response) Header() http.Header

Header returns response headers setter

func (*Response) SetBody

func (self *Response) SetBody(v []byte) *Response

Function to set Response body

func (*Response) SetCookie

func (self *Response) SetCookie(key string, value string, expires time.Duration) *Response

Function to set Response cookies

func (*Response) SetStatus

func (self *Response) SetStatus(code int) *Response

Function to set Response status code

func (*Response) WriteHeader added in v0.4.2

func (r *Response) WriteHeader(status int)

Function to set Response status code

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL