package http import ( "fmt" "net/http" "example.com/m/internal/handlers" "example.com/m/internal/middleware" "github.com/gin-gonic/gin" ) type Server struct { address string engine *gin.Engine linksHandler *handlers.LinksHandler } func NewServer(address string, lh *handlers.LinksHandler) *Server { engine := gin.New() engine.Use(gin.Logger()) engine.Use(gin.Recovery()) engine.Use(middleware.SecurityHeaders()) rl := middleware.NewRateLimiter(10, 20) engine.Use(rl.Middleware()) return &Server{ address: address, engine: engine, linksHandler: lh, } } func (s *Server) Start() error { s.routes() fmt.Printf("starting server on %s\n", s.address) if err := s.engine.Run(s.address); err != nil && err != http.ErrServerClosed { return fmt.Errorf("error occurred while starting the server: %w", err) } return nil }