feat: release v0.26 portable i18n and presentation adapters

This commit is contained in:
2026-09-29 13:31:42 +08:00
parent 6a95cad184
commit d1a747c36f
75 changed files with 5681 additions and 52 deletions

View File

@@ -16,6 +16,10 @@ type Result struct {
Err error
BusinessCode any
Failed bool
// MessageOverride is optional localized presentation. Message remains the
// canonical catalog text for validation. Custom protocols opt in by calling
// PublicMessage; fixed acknowledgments remain under their encoder's control.
MessageOverride *string
// PreserveStatus keeps an explicit protocol status through catalog mapping
// and HTTP output (for example, readiness must remain 503 when unhealthy).
PreserveStatus bool
@@ -24,6 +28,13 @@ type Result struct {
// IsError preserves failure semantics independently of the HTTP status.
func (r Result) IsError() bool { return r.Failed || r.Err != nil || r.Status >= 400 }
func (r Result) PublicMessage() string {
if r.MessageOverride != nil {
return *r.MessageOverride
}
return r.Message
}
// Payload is a complete response. Encoders must be safe for concurrent use.
// Status and headers are intentionally part of the contract: callback protocols
// may acknowledge an error using a different HTTP status or media type.