builder

package
v0.0.0-...-d7bfbf2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 8, 2023 License: MIT Imports: 8 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NoWrap

func NoWrap(errStmt *jen.Statement) *jen.Statement

NoWrap returns error statement as is.

func ToString

func ToString(err *Error) string

ToString converts the error into a string.

Types

type Basic

type Basic struct{}

Basic handles basic data types.

func (*Basic) Build

func (*Basic) Build(_ Generator, _ *MethodContext, sourceID *xtype.JenID, source, target *xtype.Type) ([]jen.Code, *xtype.JenID, *Error)

Build creates conversion source code for the given source and target type.

func (*Basic) Matches

func (*Basic) Matches(_ *MethodContext, source, target *xtype.Type) bool

Matches returns true, if the builder can create handle the given types.

type BasicTargetPointerRule

type BasicTargetPointerRule struct{}

BasicTargetPointerRule handles edge conditions if the target type is a pointer.

func (*BasicTargetPointerRule) Build

func (*BasicTargetPointerRule) Build(gen Generator, ctx *MethodContext, sourceID *xtype.JenID, source, target *xtype.Type) ([]jen.Code, *xtype.JenID, *Error)

Build creates conversion source code for the given source and target type.

func (*BasicTargetPointerRule) Matches

func (*BasicTargetPointerRule) Matches(_ *MethodContext, source, target *xtype.Type) bool

Matches returns true, if the builder can create handle the given types.

type Builder

type Builder interface {
	// Matches returns true, if the builder can create handle the given types.
	Matches(ctx *MethodContext, source, target *xtype.Type) bool
	// Build creates conversion source code for the given source and target type.
	Build(gen Generator, ctx *MethodContext, sourceID *xtype.JenID, source, target *xtype.Type) ([]jen.Code, *xtype.JenID, *Error)
}

Builder builds converter implementations, and can decide if it can handle the given type.

type ConversionFlag

type ConversionFlag int
const (
	FlagWrapErrors ConversionFlag = iota + 1
	FlagIgnoreMissing
	FlagMatchIgnoreCase
	FlagIgnoreUnexported
	FlagZeroValueOnPtrInconsistency
)

type ConversionFlags

type ConversionFlags map[ConversionFlag]bool

func (ConversionFlags) Add

func (ConversionFlags) Has

func (c ConversionFlags) Has(flag ConversionFlag) bool

func (ConversionFlags) Set

func (c ConversionFlags) Set(flag ConversionFlag)

type Error

type Error struct {
	Path  []*Path
	Cause string
}

Error defines a conversion error.

func NewError

func NewError(cause string) *Error

NewError creates an error.

func (*Error) Lift

func (e *Error) Lift(paths ...*Path) *Error

Lift appends the path to the error.

type ErrorWrapper

type ErrorWrapper func(errStmt *jen.Statement) *jen.Statement

ErrorWrapper generates code that wraps the errors returned from conversion methods, embedding extra details to ease on troubleshooting.

func Wrap

func Wrap(fmt string, argStmts ...jen.Code) ErrorWrapper

Wrap returns generator that wraps the input error statement with fmt.Errorf. Input fmt shall not include the wrapping suffix ": %w", it is appended by the method and the input err is appended as the last argument.

type ExtendMethod

type ExtendMethod struct {
	ID               string
	Name             string
	SelfAsFirstParam bool
	ReturnError      bool
	Call             *jen.Statement
	// optional source
	Source *xtype.Type
	Target *xtype.Type
}

type FieldMapping

type FieldMapping struct {
	Source   string
	Ignore   bool
	Function *ExtendMethod
}

type Generator

type Generator interface {
	Build(
		ctx *MethodContext,
		sourceID *xtype.JenID,
		source, target *xtype.Type,
		errWrapper ErrorWrapper) ([]jen.Code, *xtype.JenID, *Error)

	CallExtendMethod(
		ctx *MethodContext,
		method *ExtendMethod,
		sourceID *xtype.JenID,
		source, target *xtype.Type,
		errWrapper ErrorWrapper) ([]jen.Code, *xtype.JenID, *Error)
}

Generator checks all existing builders if they can create a conversion implementations for the given source and target type If no one Builder#Matches then, an error is returned.

type List

type List struct{}

List handles array / slice types.

func (*List) Build

func (*List) Build(gen Generator, ctx *MethodContext, sourceID *xtype.JenID, source, target *xtype.Type) ([]jen.Code, *xtype.JenID, *Error)

Build creates conversion source code for the given source and target type.

func (*List) Matches

func (*List) Matches(_ *MethodContext, source, target *xtype.Type) bool

Matches returns true, if the builder can create handle the given types.

type Map

type Map struct{}

Map handles map types.

func (*Map) Build

func (*Map) Build(gen Generator, ctx *MethodContext, sourceID *xtype.JenID, source, target *xtype.Type) ([]jen.Code, *xtype.JenID, *Error)

Build creates conversion source code for the given source and target type.

func (*Map) Matches

func (*Map) Matches(_ *MethodContext, source, target *xtype.Type) bool

Matches returns true, if the builder can create handle the given types.

type MethodContext

type MethodContext struct {
	*namer.Namer
	Fields       map[string]*FieldMapping
	SubFields    map[string]*FieldMapping
	FieldsTarget string
	Signature    xtype.Signature
	TargetType   *xtype.Type
	AutoMap      []string
	Flags        ConversionFlags
	SeenNamed    map[string]struct{}

	TargetVar *jen.Statement
}

MethodContext exposes information for the current method.

func (*MethodContext) Field

func (ctx *MethodContext) Field(target *xtype.Type, name string) *FieldMapping

func (*MethodContext) HasSeen

func (ctx *MethodContext) HasSeen(source *xtype.Type) bool

func (*MethodContext) MarkSeen

func (ctx *MethodContext) MarkSeen(source *xtype.Type)

func (*MethodContext) SetErrorTargetVar

func (ctx *MethodContext) SetErrorTargetVar(m *jen.Statement)

type Path

type Path struct {
	Prefix     string
	SourceID   string
	TargetID   string
	SourceType string
	TargetType string
}

Path defines the path inside an error message.

type Pointer

type Pointer struct{}

Pointer handles pointer types.

func (*Pointer) Build

func (*Pointer) Build(gen Generator, ctx *MethodContext, sourceID *xtype.JenID, source, target *xtype.Type) ([]jen.Code, *xtype.JenID, *Error)

Build creates conversion source code for the given source and target type.

func (*Pointer) Matches

func (*Pointer) Matches(_ *MethodContext, source, target *xtype.Type) bool

Matches returns true, if the builder can create handle the given types.

type SourcePointer

type SourcePointer struct{}

SourcePointer handles type were only the source is a pointer.

func (*SourcePointer) Build

func (*SourcePointer) Build(gen Generator, ctx *MethodContext, sourceID *xtype.JenID, source, target *xtype.Type) ([]jen.Code, *xtype.JenID, *Error)

Build creates conversion source code for the given source and target type.

func (*SourcePointer) Matches

func (*SourcePointer) Matches(ctx *MethodContext, source, target *xtype.Type) bool

Matches returns true, if the builder can create handle the given types.

type Struct

type Struct struct{}

Struct handles struct types.

func (*Struct) Build

func (*Struct) Build(gen Generator, ctx *MethodContext, sourceID *xtype.JenID, source, target *xtype.Type) ([]jen.Code, *xtype.JenID, *Error)

Build creates conversion source code for the given source and target type.

func (*Struct) Matches

func (*Struct) Matches(_ *MethodContext, source, target *xtype.Type) bool

Matches returns true, if the builder can create handle the given types.

type TargetPointer

type TargetPointer struct{}

TargetPointer handles type were only the target is a pointer.

func (*TargetPointer) Build

func (*TargetPointer) Build(gen Generator, ctx *MethodContext, sourceID *xtype.JenID, source, target *xtype.Type) ([]jen.Code, *xtype.JenID, *Error)

Build creates conversion source code for the given source and target type.

func (*TargetPointer) Matches

func (*TargetPointer) Matches(_ *MethodContext, source, target *xtype.Type) bool

Matches returns true, if the builder can create handle the given types.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL