Documentation
¶
Overview ¶
Package adapters provides struct-to-struct adaptation with field conversion and AdditionalData handling.
The Adapter type manages field conversions and performs struct-to-struct adaptation with special handling for AdditionalData fields of type null.JSON or sqlboiler/types.JSON.
Basic Usage
adapter := adapters.New() err := adapter.Into(&destStruct, &sourceStruct)
Adaptation Rules ¶
The Into method follows these rules in order:
- Copy fields with the same name and type directly
- Copy and convert fields with the same name using registered converters
- Marshal remaining source fields to dst.AdditionalData (null.JSON or types.JSON), if present
- Unmarshal src.AdditionalData (null.JSON or types.JSON) to populate dst fields
Field Converters ¶
Register custom converters for specific field names:
adapter.RegisterConverter("Temperature", func(src interface{}) (interface{}, error) {
temp := src.(float64)
return int(temp), nil
})
Ignoring Fields ¶
Fields can be excluded from adaptation using struct tags:
type User struct {
Name string
Password string `adapter:"ignore"` // Not copied or marshaled
Email string
Token string `adapter:"-"` // Alternative syntax
}
Ignored fields are:
- Not copied between source and destination structs
- Not marshaled to AdditionalData
- Not unmarshaled from AdditionalData
AdditionalData ¶
The AdditionalData field (type null.JSON or types.JSON) has special handling:
- Fields present in source but not in destination are marshaled to dst.AdditionalData
- Fields in src.AdditionalData that match dst field names are unmarshaled to dst
- Direct field copying takes precedence over AdditionalData unmarshaling by default
Embedded Structs ¶
Embedded struct fields (including pointer-to-struct) are flattened and treated as if they were defined directly in the parent struct.
Thread Safety ¶
The Adapter is safe for concurrent use. Multiple goroutines can call Into and register converters/validators concurrently. Internals use copy-on-write registries and cached plans.
Index ¶
- func AdaptTo[T any](a *Adapter, src any) (*T, error)
- func Copy[T any](a *Adapter, dst *T, src any) error
- func Make[T any](a *Adapter, src any) (T, error)
- type Adapter
- func (a *Adapter) Batch(apply func(*RegistryBatch))
- func (a *Adapter) Into(dst, src interface{}) error
- func (a *Adapter) RegisterConverter(fieldName string, fn ConverterFunc)
- func (a *Adapter) RegisterConverterFor(dstType any, fieldName string, fn ConverterFunc)
- func (a *Adapter) RegisterConverterForPair(srcType, dstType any, fieldName string, fn ConverterFunc)
- func (a *Adapter) RegisterValidator(fieldName string, fn ValidatorFunc)
- func (a *Adapter) RegisterValidatorFor(dstType any, fieldName string, fn ValidatorFunc)
- func (a *Adapter) RegisterValidatorForPair(srcType, dstType any, fieldName string, fn ValidatorFunc)
- func (a *Adapter) WarmMetadata(examples ...any)
- type Builder
- func (b *Builder) AddConverter(field string, fn ConverterFunc) *Builder
- func (b *Builder) AddConverterFor(dst any, field string, fn ConverterFunc) *Builder
- func (b *Builder) AddConverterForPair(src, dst any, field string, fn ConverterFunc) *Builder
- func (b *Builder) AddValidator(field string, fn ValidatorFunc) *Builder
- func (b *Builder) AddValidatorFor(dst any, field string, fn ValidatorFunc) *Builder
- func (b *Builder) AddValidatorForPair(src, dst any, field string, fn ValidatorFunc) *Builder
- func (b *Builder) Build() *Adapter
- func (b *Builder) WithOptions(opts ...Option) *Builder
- type ConverterFunc
- type Option
- type Options
- type OverwritePolicy
- type RegistryBatch
- func (b *RegistryBatch) ConverterFor(dst any, field string, fn ConverterFunc)
- func (b *RegistryBatch) ConverterForPair(src, dst any, field string, fn ConverterFunc)
- func (b *RegistryBatch) GlobalConverter(field string, fn ConverterFunc)
- func (b *RegistryBatch) GlobalValidator(field string, fn ValidatorFunc)
- func (b *RegistryBatch) ValidatorFor(dst any, field string, fn ValidatorFunc)
- func (b *RegistryBatch) ValidatorForPair(src, dst any, field string, fn ValidatorFunc)
- type ValidatorFunc
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Adapter ¶
type Adapter struct {
// contains filtered or unexported fields
}
Adapter performs struct adaptation with optional converters & AdditionalData handling. See README for usage and option guidelines.
func NewWithOptions ¶ added in v0.0.7
NewWithOptions creates a new Adapter with provided options.
func (*Adapter) Batch ¶ added in v0.0.7
func (a *Adapter) Batch(apply func(*RegistryBatch))
func (*Adapter) Into ¶ added in v0.0.7
Into performs adaptation from src -> dst; dst,src order for ergonomics
func (*Adapter) RegisterConverter ¶
func (a *Adapter) RegisterConverter(fieldName string, fn ConverterFunc)
RegisterConverter adds a global field converter (applies to any src/dst containing fieldName).
func (*Adapter) RegisterConverterFor ¶ added in v0.0.7
func (a *Adapter) RegisterConverterFor(dstType any, fieldName string, fn ConverterFunc)
RegisterConverterFor scope: destination type + fieldName.
func (*Adapter) RegisterConverterForPair ¶ added in v0.0.7
func (a *Adapter) RegisterConverterForPair(srcType, dstType any, fieldName string, fn ConverterFunc)
RegisterConverterForPair scope: (srcType,dstType)+fieldName highest precedence.
func (*Adapter) RegisterValidator ¶ added in v0.0.7
func (a *Adapter) RegisterValidator(fieldName string, fn ValidatorFunc)
RegisterValidator adds a global validator for a field name.
func (*Adapter) RegisterValidatorFor ¶ added in v0.0.7
func (a *Adapter) RegisterValidatorFor(dstType any, fieldName string, fn ValidatorFunc)
RegisterValidatorFor adds a validator scoped to a destination type.
func (*Adapter) RegisterValidatorForPair ¶ added in v0.0.7
func (a *Adapter) RegisterValidatorForPair(srcType, dstType any, fieldName string, fn ValidatorFunc)
RegisterValidatorForPair adds a validator scoped to (srcType,dstType) for a field name.
func (*Adapter) WarmMetadata ¶ added in v0.0.7
WarmMetadata pre-builds metadata for provided example values or types.
type Builder ¶ added in v0.0.7
type Builder struct {
// contains filtered or unexported fields
}
Builder provides a fluent API to construct an Adapter with options, converters and validators pre-registered.
func (*Builder) AddConverter ¶ added in v0.0.7
func (b *Builder) AddConverter(field string, fn ConverterFunc) *Builder
AddConverter registers a global converter by field name.
func (*Builder) AddConverterFor ¶ added in v0.0.7
func (b *Builder) AddConverterFor(dst any, field string, fn ConverterFunc) *Builder
AddConverterFor registers a converter for a destination type and field name.
func (*Builder) AddConverterForPair ¶ added in v0.0.7
func (b *Builder) AddConverterForPair(src, dst any, field string, fn ConverterFunc) *Builder
AddConverterForPair registers a converter for a (src,dst) pair and field name.
func (*Builder) AddValidator ¶ added in v0.0.7
func (b *Builder) AddValidator(field string, fn ValidatorFunc) *Builder
AddValidator registers a global validator by field name.
func (*Builder) AddValidatorFor ¶ added in v0.0.7
func (b *Builder) AddValidatorFor(dst any, field string, fn ValidatorFunc) *Builder
AddValidatorFor registers a validator for a destination type and field name.
func (*Builder) AddValidatorForPair ¶ added in v0.0.7
func (b *Builder) AddValidatorForPair(src, dst any, field string, fn ValidatorFunc) *Builder
AddValidatorForPair registers a validator for a (src,dst) pair and field name.
func (*Builder) Build ¶ added in v0.0.7
Build constructs an Adapter using a single registry swap for converters and validators.
func (*Builder) WithOptions ¶ added in v0.0.7
WithOptions appends adapter options to the builder.
type ConverterFunc ¶
type ConverterFunc func(src interface{}) (interface{}, error)
ConverterFunc is a function that converts a source field value to a destination field value. It is registered by field name and applies to any source/destination struct pair.
func ComposeConverters ¶ added in v0.0.7
func ComposeConverters(fns ...ConverterFunc) ConverterFunc
Composition helpers ComposeConverters chains multiple ConverterFunc instances left-to-right. If any converter returns an error it aborts. Nil output propagates immediately.
func MapString ¶ added in v0.0.7
func MapString(f func(string) string) ConverterFunc
MapString returns a ConverterFunc applying f when src is a string; otherwise returns src unchanged.
type Option ¶ added in v0.0.7
type Option func(*Options)
func WithCaseInsensitiveAdditionalData ¶ added in v0.0.7
func WithDisableMarshalAdditionalData ¶ added in v0.0.7
func WithDisableUnmarshalAdditionalData ¶ added in v0.0.7
func WithIncludeZeroValues ¶ added in v0.0.7
func WithOverwritePolicy ¶ added in v0.0.7
func WithOverwritePolicy(p OverwritePolicy) Option
type Options ¶ added in v0.0.7
type Options struct {
IncludeZeroValues bool // when true, include zero-valued fields in marshaled AdditionalData
CaseInsensitiveAdditionalData bool // when true, AdditionalData keys are matched case-insensitively
OverwritePolicy OverwritePolicy // controls if AdditionalData overwrites direct fields
DisableMarshalAdditionalData bool // when true, do not marshal remaining fields into destination AdditionalData
DisableUnmarshalAdditionalData bool // when true, ignore source AdditionalData
}
type OverwritePolicy ¶ added in v0.0.7
type OverwritePolicy int
OverwritePolicy controls how AdditionalData values interact with already-set fields
const ( PreferFields OverwritePolicy = iota // default: do not overwrite fields set from direct mapping PreferAdditionalData // overwrite fields with values from AdditionalData if present )
type RegistryBatch ¶ added in v0.0.7
type RegistryBatch struct {
// contains filtered or unexported fields
}
Batch registration to reduce COW churn
func (*RegistryBatch) ConverterFor ¶ added in v0.0.7
func (b *RegistryBatch) ConverterFor(dst any, field string, fn ConverterFunc)
func (*RegistryBatch) ConverterForPair ¶ added in v0.0.7
func (b *RegistryBatch) ConverterForPair(src, dst any, field string, fn ConverterFunc)
func (*RegistryBatch) GlobalConverter ¶ added in v0.0.7
func (b *RegistryBatch) GlobalConverter(field string, fn ConverterFunc)
RegistryBatch helpers
func (*RegistryBatch) GlobalValidator ¶ added in v0.0.7
func (b *RegistryBatch) GlobalValidator(field string, fn ValidatorFunc)
func (*RegistryBatch) ValidatorFor ¶ added in v0.0.7
func (b *RegistryBatch) ValidatorFor(dst any, field string, fn ValidatorFunc)
func (*RegistryBatch) ValidatorForPair ¶ added in v0.0.7
func (b *RegistryBatch) ValidatorForPair(src, dst any, field string, fn ValidatorFunc)
type ValidatorFunc ¶ added in v0.0.7
type ValidatorFunc func(value interface{}) error
ValidatorFunc validates a field value after conversion and assignment candidate.