Skip to content

mozgio/application

Repository files navigation

application

Go Test

Application package.

example

package main

import (
	"time"

	"github.com/mozgio/application"
	"go.uber.org/zap"
)

func main() {
	cfg := application.MustParseConfig[Config]()

	run := func(ctx application.Context[Config, any]) {
		timer := time.NewTimer(time.Second * 5)
		for t := range timer.C {
			ctx.Log().Info("time", zap.Time("time", t))
		}
	}

	application.
		New[Config, any]().
		WithConfig(cfg).
		WithGRPC(cfg.GRPCAddress()).
		WithHTTP(cfg.HTTPAddress()).
		WithRunner(run).
		Listen()
}

// Config struct.
type Config struct {
	GRPCHost    string `env:"GRPC_HOST" envDefault:"0.0.0.0"`
	GRPCPort    int    `env:"GRPC_PORT" envDefault:"9000"`
	HTTPHost    string `env:"HTTP_HOST" envDefault:"0.0.0.0"`
	HTTPPort    int    `env:"HTTP_PORT" envDefault:"9080"`
	DatabaseDsn string `env:"DATABASE_DSN" envDefault:"root:password@tcp(localhost:3306)/mozg"`
	NatsURL     string `env:"NATS_URL" envDefault:"demo.nats.io:4222"`
}

func (c *Config) GRPCAddress() (string, int) {
	return c.GRPCHost, c.GRPCPort
}

func (c *Config) HTTPAddress() (string, int) {
	return c.HTTPHost, c.HTTPPort
}