- config package doc: explain Duration fields, TOML format, env vars - duration.go: expanded godoc with access pattern examples - README: show .Duration access in quick start Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
38 lines
1.0 KiB
Go
38 lines
1.0 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
// Duration is a [time.Duration] that can be unmarshalled from a TOML string
|
|
// (e.g., "30s", "5m"). go-toml v2 does not natively decode strings into
|
|
// time.Duration, so this wrapper implements [encoding.TextUnmarshaler].
|
|
//
|
|
// Access the underlying time.Duration via the embedded field:
|
|
//
|
|
// cfg.Server.ReadTimeout.Duration // time.Duration value
|
|
//
|
|
// Duration values work directly with time functions that accept
|
|
// time.Duration because of the embedding:
|
|
//
|
|
// time.After(cfg.Server.ReadTimeout.Duration)
|
|
type Duration struct {
|
|
time.Duration
|
|
}
|
|
|
|
// UnmarshalText implements encoding.TextUnmarshaler for TOML string decoding.
|
|
func (d *Duration) UnmarshalText(text []byte) error {
|
|
parsed, err := time.ParseDuration(string(text))
|
|
if err != nil {
|
|
return fmt.Errorf("invalid duration %q: %w", string(text), err)
|
|
}
|
|
d.Duration = parsed
|
|
return nil
|
|
}
|
|
|
|
// MarshalText implements encoding.TextMarshaler for TOML string encoding.
|
|
func (d Duration) MarshalText() ([]byte, error) {
|
|
return []byte(d.String()), nil
|
|
}
|