package common import ( "errors" "log/slog" "net/http" "github.com/oklog/run" ) // Runner is a helper struct that runs a group of services. type Runner struct { Group run.Group Logger *slog.Logger } func (r Runner) Run() { err := r.Group.Run(run.WithReverseShutdownOrder()) if e := &(run.SignalError{}); errors.As(err, &e) { r.Logger.Info("received signal: shutting down", slog.String("signal", e.Signal.String())) } else if !errors.Is(err, http.ErrServerClosed) { r.Logger.Error("application stopped due to error", slog.Any("error", err)) } }