package main
import (
"context"
"log/slog"
"os"
"os/signal"
"syscall"
"golang.org/x/sync/errgroup"
"maragu.dev/env"
"app/http"
)
func main() {
log := slog.New(slog.NewTextHandler(os.Stderr, nil))
if err := start(log); err != nil {
log.Error("Error starting app", "error", err)
os.Exit(1)
}
}
func start(log *slog.Logger) error {
log.Info("Starting app")
_ = env.Load()
ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGTERM, syscall.SIGINT)
defer stop()
s := http.NewServer(http.NewServerOptions{
Log: log,
})
eg, ctx := errgroup.WithContext(ctx)
eg.Go(func() error {
return s.Start()
})
<-ctx.Done()
log.Info("Stopping app")
eg.Go(func() error {
return s.Stop()
})
if err := eg.Wait(); err != nil {
return err
}
log.Info("Stopped app")
return nil
}