Documentation
¶
Overview ¶
Package encoding provides value encoding/decoding helpers and DI wiring used by go-service.
This package defines a small Encoder interface (encode to an io.Writer, decode from an io.Reader) and a registry (Map) used to select an encoder by kind at runtime.
Registry ¶
Map is a kind-to-Encoder lookup. It is commonly used by configuration loading and transport layers to choose a decoder/encoder based on either:
- a file extension (for example "yaml", "yml", "toml", "json"), or
- a content kind / media subtype (for example "proto", "plain", "octet-stream").
Callers typically obtain a *Map via DI and then use Map.Get to select an encoder, often falling back to a default when the requested kind is not registered.
Wiring ¶
Module wires the default encoder implementations and provides a *Map that registers the supplied encoders under common kinds used throughout go-service, including:
- JSON, HJSON, YAML, TOML, MessagePack
- protobuf binary/text/JSON variants
- gob
- "plain"/bytes passthrough for io.ReaderFrom/io.WriterTo payloads
Index ¶
Constants ¶
This section is empty.
Variables ¶
var Module = di.Module( di.Constructor(proto.NewBinary), di.Constructor(proto.NewText), di.Constructor(proto.NewJSON), di.Constructor(json.NewEncoder), di.Constructor(hjson.NewEncoder), di.Constructor(toml.NewEncoder), di.Constructor(yaml.NewEncoder), di.Constructor(msgpack.NewEncoder), di.Constructor(gob.NewEncoder), di.Constructor(bytes.NewEncoder), di.Constructor(NewMap), )
Module wires the default encoder implementations and the encoder registry into go.uber.org/fx/go.uber.org/dig.
It provides protobuf encoders (*proto.Binary, *proto.Text, *proto.JSON), structured config encoders (*json.Encoder, *hjson.Encoder, *toml.Encoder, *yaml.Encoder, *msgpack.Encoder), and passthrough/specialized encoders (*gob.Encoder and *bytes.Encoder).
Finally, it constructs a *Map via NewMap, registering the provided encoders under common kind aliases (for example "yaml"/"yml", protobuf kind synonyms, and "plain"/"octet-stream" passthrough kinds).
Functions ¶
This section is empty.
Types ¶
type Encoder ¶
type Encoder interface {
// Encode writes a serialized representation of v to w.
Encode(w io.Writer, v any) error
// Decode reads from r and decodes into v.
Decode(r io.Reader, v any) error
}
Encoder encodes values to a writer and decodes values from a reader.
Encoder is intentionally minimal so multiple concrete encodings (JSON/YAML/TOML/protobuf/gob, etc.) can be used interchangeably.
Encode contract ¶
Encode must serialize v to w. Implementations may require that v satisfies additional interfaces or is of a particular shape (for example a protobuf encoder may require v to implement google.golang.org/protobuf/proto.Message).
Decode contract ¶
Decode must read from r and populate v. In most cases v is expected to be a pointer to the target value so the decoder can mutate it (e.g. *MyStruct). Implementations may return an error if v is not a supported type (for example github.com/alexfalkowski/go-service/v2/encoding/errors.ErrInvalidType).
Structured single-value decoders should reject additional encoded values after the first payload, either by consuming the whole input or by returning github.com/alexfalkowski/go-service/v2/encoding/errors.ErrTrailingData. Stream or passthrough encoders may delegate full-consumption semantics to the concrete value they decode into.
Some implementations buffer the remaining contents of r before decoding. When r contains untrusted input, callers must bound it before calling Decode. Standard go-service HTTP and cache wiring applies those limits before values reach encoders.
Implementations should return any underlying I/O errors and any parse/unmarshal errors produced by their respective codecs.
type Map ¶
type Map struct {
// contains filtered or unexported fields
}
Map provides lookup and registration of encoders by kind.
This type is a thin convenience around a string-keyed map and is commonly used with configuration to select an encoder at runtime.
Map is not concurrency-safe. If you mutate it via Register, do so during initialization.
func NewMap ¶
NewMap constructs a Map from the supplied encoder dependencies.
The returned registry includes common kinds used throughout go-service, mapped to the corresponding fields from params:
Structured config formats: "json", "hjson", "yaml", "yml", "toml", "msgpack"
Protobuf formats:
binary: "proto", "protobuf", "pb", "protobin", "pbbin"
text: "prototext", "prototxt", "pbtxt"
JSON: "protojson", "pbjson"
gob: "gob"
bytes/plain passthrough: "plain", "octet-stream", "markdown"
Callers can add additional kinds or override existing kinds via Map.Register. NewMap does not synthesize encoders; if a params field is nil, its registered kind aliases resolve to nil.
func (*Map) Get ¶
Get returns the encoder registered for kind.
If no encoder is registered for kind, or if kind was registered with a nil encoder, Get returns nil. Callers typically treat nil as "unknown or unavailable kind" and fall back to a default encoder elsewhere.
type MapParams ¶
type MapParams struct {
di.In
// JSON is the encoder implementation registered under kind "json".
JSON *json.Encoder
// HumanJSON is the encoder implementation registered under kind "hjson".
HumanJSON *hjson.Encoder
// YAML is the encoder implementation registered under kinds "yaml" and "yml".
YAML *yaml.Encoder
// TOML is the encoder implementation registered under kind "toml".
TOML *toml.Encoder
// MessagePack is the encoder implementation registered under kind "msgpack".
MessagePack *msgpack.Encoder `optional:"true"`
// ProtoBinary is the encoder implementation registered under common binary kinds
// (e.g. "proto", "protobuf", "pb", etc.).
ProtoBinary *proto.Binary
// ProtoText is the encoder implementation registered under common text kinds
// (e.g. "prototext", "prototxt", "pbtxt").
ProtoText *proto.Text
// ProtoJSON is the encoder implementation registered under common JSON kinds
// (e.g. "protojson", "pbjson").
ProtoJSON *proto.JSON
// GOB is the encoder implementation registered under kind "gob".
GOB *gob.Encoder
// Bytes is the passthrough encoder for [io.ReaderFrom]/[io.WriterTo] payloads, registered under kinds
// like "plain", "octet-stream", and "markdown".
Bytes *bytes.Encoder
}
MapParams defines the dependencies used to construct an encoding Map.
It is intended for dependency injection (go.uber.org/fx/go.uber.org/dig). The default wiring is provided by Module. NewMap registers these values as supplied; direct callers that leave a field nil will get a nil encoder for that field's registered kind aliases.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package base64 provides encoding helpers and adapters used by go-service.
|
Package base64 provides encoding helpers and adapters used by go-service. |
|
Package bytes provides byte-oriented encoding helpers and adapters used by go-service.
|
Package bytes provides byte-oriented encoding helpers and adapters used by go-service. |
|
Package errors provides encoding error values and helpers used by go-service.
|
Package errors provides encoding error values and helpers used by go-service. |
|
Package gob provides Gob encoding helpers and adapters used by go-service.
|
Package gob provides Gob encoding helpers and adapters used by go-service. |
|
Package hjson provides HJSON encoding helpers and adapters used by go-service.
|
Package hjson provides HJSON encoding helpers and adapters used by go-service. |
|
Package json provides the go-service JSON import path.
|
Package json provides the go-service JSON import path. |
|
Package msgpack provides MessagePack encoding helpers and adapters used by go-service.
|
Package msgpack provides MessagePack encoding helpers and adapters used by go-service. |
|
Package proto provides Protocol Buffers (protobuf) encoding helpers and adapters used by go-service.
|
Package proto provides Protocol Buffers (protobuf) encoding helpers and adapters used by go-service. |
|
Package toml provides TOML encoding helpers and adapters used by go-service.
|
Package toml provides TOML encoding helpers and adapters used by go-service. |
|
Package yaml provides YAML encoding helpers and adapters used by go-service.
|
Package yaml provides YAML encoding helpers and adapters used by go-service. |