package main import ( "fmt" "local/args" "time" "golang.org/x/time/rate" ) type Config struct { Listen string Timeout time.Duration TLSInsecure bool Limiter *rate.Limiter } func NewConfig() *Config { as := args.NewArgSet() as.Append(args.INT, "p", "port to listen on", 61113) as.Append(args.INT, "kbps", "kilobytes per sec limit", -1) as.Append(args.BOOL, "tls-insecure", "permit tls insecure", false) as.Append(args.DURATION, "t", "timeout", time.Minute) if err := as.Parse(); err != nil { panic(err) } var limiter *rate.Limiter if kbps := as.GetInt("kbps"); kbps > 0 { limiter = rate.NewLimiter(rate.Limit(kbps), 100*1024) } return &Config{ Listen: fmt.Sprintf(":%v", as.GetInt("p")), Timeout: as.GetDuration("t"), TLSInsecure: as.GetBool("tls-insecure"), Limiter: limiter, } }