all repos

onasty @ f537564

a one-time notes service

onasty/internal/transport/http/httpserver/httpserver.go(view raw)

1
package httpserver
2
3
import (
4
	"context"
5
	"net/http"
6
	"strconv"
7
	"time"
8
)
9
10
type Server struct {
11
	http *http.Server
12
}
13
14
type Config struct {
15
	// Port http server port
16
	Port int
17
18
	// ReadTimeout read timeout
19
	ReadTimeout time.Duration
20
21
	// WriteTimeout write timeout
22
	WriteTimeout time.Duration
23
24
	// MaxHeaderSizeMb max size of headers in megabytes
25
	MaxHeaderSizeMb int
26
}
27
28
func NewServer(handler http.Handler, cfg Config) *Server {
29
	p := strconv.Itoa(cfg.Port)
30
	return &Server{
31
		http: &http.Server{
32
			Addr:           ":" + p,
33
			Handler:        handler,
34
			ReadTimeout:    cfg.ReadTimeout,
35
			WriteTimeout:   cfg.WriteTimeout,
36
			MaxHeaderBytes: cfg.MaxHeaderSizeMb << 20,
37
		},
38
	}
39
}
40
41
// NewDefaultServer returns http server with default config
42
func NewDefaultServer(handler http.Handler, port int) *Server {
43
	p := strconv.Itoa(port)
44
	return &Server{
45
		http: &http.Server{
46
			Addr:           ":" + p,
47
			Handler:        handler,
48
			ReadTimeout:    10 * time.Second,
49
			WriteTimeout:   10 * time.Second,
50
			MaxHeaderBytes: 1 << 20,
51
		},
52
	}
53
}
54
55
func (s *Server) Start() error {
56
	return s.http.ListenAndServe()
57
}
58
59
func (s *Server) Stop(ctx context.Context) error {
60
	return s.http.Shutdown(ctx)
61
}