Add optional http server config params #11

Merged
naslevente merged 1 commits from feat-router into master 2025-09-17 01:25:51 -04:00
3 changed files with 46 additions and 10 deletions

View File

@@ -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

View File

@@ -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) {

View File

@@ -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
}