template/internal/greeter/greeter.go
djmil 13f6a6812a result.Wrap - propagate a failed Expect into a new type U
- public API streamline
- Failf[T]("msg") -	originate a failure from a message; embed a cause with %w
- Err[T](err) - sets .err verbatim (the return zero, err / sentinel case)
2026-06-14 11:43:23 +00:00

38 lines
969 B
Go

// Package greeter is a minimal example domain package.
// It demonstrates how to:
// - define an interface (satisfied by manual fakes in tests)
// - inject a component-scoped logger through the constructor
//
// Replace this package with your own domain logic.
package greeter
import (
"fmt"
"gitea.djmil.dev/go/template/pkg/logger"
"gitea.djmil.dev/go/template/pkg/result"
)
// Service is the concrete implementation.
type Service struct {
log *logger.Logger
}
// New creates a Greeter service with the provided logger.
func New(log *logger.Logger) *Service {
return &Service{log: log.WithField("component", "greeter")}
}
// Greet returns a personalized greeting and logs the interaction.
func (s *Service) Greet(name string) result.Expect[string] {
if name == "" {
return result.Failf[string]("name must not be empty")
}
msg := fmt.Sprintf("Hello, %s!", name)
s.log.WithField("name", name).Debug("greeting generated")
return result.Ok(msg)
}