-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathconfig.go
More file actions
64 lines (57 loc) · 1.9 KB
/
Copy pathconfig.go
File metadata and controls
64 lines (57 loc) · 1.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// Copyright 2015 Eryx <evorui at gmail dot com>, All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package httpsrv
import "time"
// Version is the library version.
const Version = "2.0.0-beta.2"
// Config holds server settings, applied at construction via WithConfig. Zero
// fields keep the defaults set in New.
type Config struct {
// Addr is the listen address (default ":8080"; a string passed to Run
// overrides it).
Addr string
// Timeouts; defaults are Read/Write 60s, ReadHeader 10s. Set WriteTimeout
// to a large value (or use streaming) for long responses.
ReadTimeout time.Duration
WriteTimeout time.Duration
ReadHeaderTimeout time.Duration
// MaxHeaderBytes caps request header size (default 1 MiB).
MaxHeaderBytes int
}
// WithConfig applies server settings from cfg. Only non-zero fields override the
// defaults. Example:
//
// app := httpsrv.New(httpsrv.WithConfig(httpsrv.Config{
// Addr: ":3000",
// ReadTimeout: 30 * time.Second,
// }))
func WithConfig(cfg Config) Option {
return func(a *app) {
if cfg.Addr != "" {
a.addr = cfg.Addr
}
if cfg.ReadTimeout != 0 {
a.readTimeout = cfg.ReadTimeout
}
if cfg.WriteTimeout != 0 {
a.writeTimeout = cfg.WriteTimeout
}
if cfg.ReadHeaderTimeout != 0 {
a.readHeaderTimeout = cfg.ReadHeaderTimeout
}
if cfg.MaxHeaderBytes != 0 {
a.maxHeaderBytes = cfg.MaxHeaderBytes
}
}
}