github.com/angenalZZZ/gofunc@v0.0.0-20210507121333-48ff1be3917b/http/fast/middleware/requestid/xid.go (about) 1 package requestid 2 3 import ( 4 "github.com/angenalZZZ/gofunc/http/fast" 5 "github.com/rs/xid" 6 ) 7 8 const HeaderXRequestID string = "X-Request-ID" 9 10 // Config defines the config for X-Request-ID middleware 11 type Config struct { 12 // Filter defines a function to skip middleware. 13 // Optional. Default: nil 14 Filter func(*fast.Ctx) bool 15 // Generator defines a function to generate an ID. 16 // Optional. Default: func() string { 17 // return uuid.New().String() 18 // } 19 Generator func() string 20 } 21 22 // New middleware. 23 // app.Use(requestid.New()) 24 func New(config ...Config) func(*fast.Ctx) { 25 // Init config 26 var cfg Config 27 // SetHeader config if provided 28 if len(config) > 0 { 29 cfg = config[0] 30 } 31 // Set config default values 32 if cfg.Generator == nil { 33 cfg.Generator = func() string { 34 return xid.New().String() 35 } 36 } 37 // Return middleware handle 38 return func(c *fast.Ctx) { 39 // Filter request to skip middleware 40 if cfg.Filter != nil && cfg.Filter(c) { 41 c.Next() 42 return 43 } 44 // Get value from X-Request-ID 45 rid := c.GetHeader(HeaderXRequestID) 46 // Create new ID 47 if rid == "" { 48 rid = cfg.Generator() 49 // Set X-Request-ID 50 c.SetHeader(HeaderXRequestID, rid) 51 } 52 c.Next() 53 } 54 }