| 73 | ) |
| 74 | |
| 75 | func (s Settings) Validate() (err error) { |
| 76 | err = validate.ListeningAddress(s.Address, os.Getuid()) |
| 77 | if err != nil { |
| 78 | return err |
| 79 | } |
| 80 | |
| 81 | if s.Handler == nil { |
| 82 | return fmt.Errorf("%w", ErrHandlerIsNotSet) |
| 83 | } |
| 84 | |
| 85 | if s.Logger == nil { |
| 86 | return fmt.Errorf("%w", ErrLoggerIsNotSet) |
| 87 | } |
| 88 | |
| 89 | const minReadTimeout = time.Millisecond |
| 90 | if s.ReadHeaderTimeout < minReadTimeout { |
| 91 | return fmt.Errorf("%w: %s must be at least %s", |
| 92 | ErrReadHeaderTimeoutTooSmall, |
| 93 | s.ReadHeaderTimeout, minReadTimeout) |
| 94 | } |
| 95 | |
| 96 | if s.ReadTimeout < minReadTimeout { |
| 97 | return fmt.Errorf("%w: %s must be at least %s", |
| 98 | ErrReadTimeoutTooSmall, |
| 99 | s.ReadTimeout, minReadTimeout) |
| 100 | } |
| 101 | |
| 102 | const minShutdownTimeout = 5 * time.Millisecond |
| 103 | if s.ShutdownTimeout < minShutdownTimeout { |
| 104 | return fmt.Errorf("%w: %s must be at least %s", |
| 105 | ErrShutdownTimeoutTooSmall, |
| 106 | s.ShutdownTimeout, minShutdownTimeout) |
| 107 | } |
| 108 | |
| 109 | return nil |
| 110 | } |
| 111 | |
| 112 | func (s Settings) ToLinesNode() (node *gotree.Node) { |
| 113 | node = gotree.New("HTTP server settings:") |