feat: add optional http server config params
This commit is contained in:
@@ -8,12 +8,26 @@ import (
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
Type "github.com/lbatuska/goutils/type"
|
||||
)
|
||||
|
||||
func (rg *RouteGroup) StartServer(addr string) *http.Server {
|
||||
server := &http.Server{
|
||||
Addr: addr,
|
||||
Handler: rg,
|
||||
func (rg *RouteGroup) StartServer(addr string, config Type.Optional[ServerConfig]) *http.Server {
|
||||
var server *http.Server
|
||||
if config.HasValue() {
|
||||
serverConfig := config.Unwrap()
|
||||
server = &http.Server{
|
||||
Addr: addr,
|
||||
Handler: rg,
|
||||
ReadTimeout: serverConfig.ReadTimeout,
|
||||
ReadHeaderTimeout: serverConfig.ReadHeaderTimeout,
|
||||
WriteTimeout: serverConfig.WriteTimeout,
|
||||
}
|
||||
} else {
|
||||
server = &http.Server{
|
||||
Addr: addr,
|
||||
Handler: rg,
|
||||
}
|
||||
}
|
||||
|
||||
go func() {
|
||||
@@ -25,10 +39,22 @@ func (rg *RouteGroup) StartServer(addr string) *http.Server {
|
||||
return server
|
||||
}
|
||||
|
||||
func (rg *RouteGroup) StartWithGracefulShutdown(addr string) {
|
||||
server := &http.Server{
|
||||
Addr: addr,
|
||||
Handler: rg, // This will use your RouteGroup (with ServeMux) as the handler
|
||||
func (rg *RouteGroup) StartWithGracefulShutdown(addr string, config Type.Optional[ServerConfig]) {
|
||||
var server *http.Server
|
||||
if config.HasValue() {
|
||||
serverConfig := config.Unwrap()
|
||||
server = &http.Server{
|
||||
Addr: addr,
|
||||
Handler: rg,
|
||||
ReadTimeout: serverConfig.ReadTimeout,
|
||||
ReadHeaderTimeout: serverConfig.ReadHeaderTimeout,
|
||||
WriteTimeout: serverConfig.WriteTimeout,
|
||||
}
|
||||
} else {
|
||||
server = &http.Server{
|
||||
Addr: addr,
|
||||
Handler: rg,
|
||||
}
|
||||
}
|
||||
|
||||
// Start the server in a separate goroutine
|
||||
|
||||
@@ -9,6 +9,7 @@ import (
|
||||
"time"
|
||||
|
||||
Testing "github.com/lbatuska/goutils/testing"
|
||||
Type "github.com/lbatuska/goutils/type"
|
||||
)
|
||||
|
||||
func setupServer(wg *sync.WaitGroup) {
|
||||
@@ -23,7 +24,7 @@ func setupServer(wg *sync.WaitGroup) {
|
||||
w.WriteHeader(200)
|
||||
}))
|
||||
|
||||
simpleRouter.StartWithGracefulShutdown("0.0.0.0:8080")
|
||||
simpleRouter.StartWithGracefulShutdown("0.0.0.0:8080", Type.None[ServerConfig]())
|
||||
}
|
||||
|
||||
func sendKillSignal(wg *sync.WaitGroup) {
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package SimpleRouter
|
||||
|
||||
import "net/http"
|
||||
import (
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Middleware func(http.Handler) http.Handler
|
||||
|
||||
@@ -10,3 +13,9 @@ type RouteGroup struct {
|
||||
middlewares []Middleware // Stack of middlewares that will be applied on a handler in order
|
||||
global_middlewares *[]Middleware
|
||||
}
|
||||
|
||||
type ServerConfig struct {
|
||||
ReadTimeout time.Duration
|
||||
ReadHeaderTimeout time.Duration
|
||||
WriteTimeout time.Duration
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user