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  }