github.com/ipni/storetheindex@v0.8.30/assigner/server/option.go (about) 1 package server 2 3 import ( 4 "fmt" 5 "time" 6 ) 7 8 const ( 9 defaultWriteTimeout = 30 * time.Second 10 defaultReadTimeout = 30 * time.Second 11 ) 12 13 // config contains all options for the server. 14 type config struct { 15 writeTimeout time.Duration 16 readTimeout time.Duration 17 version string 18 } 19 20 // Option is a function that sets a value in a config. 21 type Option func(*config) error 22 23 // getOpts creates a config and applies Options to it. 24 func getOpts(opts []Option) (config, error) { 25 cfg := config{ 26 writeTimeout: defaultWriteTimeout, 27 readTimeout: defaultReadTimeout, 28 } 29 30 for i, opt := range opts { 31 if err := opt(&cfg); err != nil { 32 return config{}, fmt.Errorf("option %d error: %s", i, err) 33 } 34 } 35 return cfg, nil 36 } 37 38 // WithWriteTimeout configures server write timeout. 39 func WithWriteTimeout(t time.Duration) Option { 40 return func(c *config) error { 41 c.writeTimeout = t 42 return nil 43 } 44 } 45 46 // WithReadTimeout configures server read timeout. 47 func WithReadTimeout(t time.Duration) Option { 48 return func(c *config) error { 49 c.readTimeout = t 50 return nil 51 } 52 } 53 54 // WithVersion sets the version string used in /health output. 55 func WithVersion(ver string) Option { 56 return func(c *config) error { 57 c.version = ver 58 return nil 59 } 60 }