builder

package
v1.3.1 Latest Latest
Warning

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

Go to latest
Published: Jan 27, 2024 License: MIT Imports: 10 Imported by: 1

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NoWrap added in v0.9.0

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 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 added in v0.9.0

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 added in v0.9.0

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 Generator

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

	CallMethod(
		ctx *MethodContext,
		method *method.Definition,
		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
	Conf              *config.Method
	FieldsTarget      string
	OutputPackagePath string
	Signature         xtype.Signature
	TargetType        *xtype.Type
	HasMethod         func(types.Type, types.Type) bool
	SeenNamed         map[string]struct{}

	TargetVar *jen.Statement
}

MethodContext exposes information for the current method.

func (*MethodContext) DefinedFields added in v1.3.0

func (ctx *MethodContext) DefinedFields(target *xtype.Type) map[string]struct{}

func (*MethodContext) Field added in v0.12.0

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

func (*MethodContext) HasSeen added in v0.17.4

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

func (*MethodContext) MarkSeen added in v0.17.4

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

func (*MethodContext) SetErrorTargetVar added in v0.15.0

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 SkipCopy added in v0.18.0

type SkipCopy struct{}

SkipCopy handles FlagSkipCopySameType.

func (*SkipCopy) Build added in v0.18.0

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

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

func (*SkipCopy) Matches added in v0.18.0

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

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

type SourcePointer added in v0.17.0

type SourcePointer struct{}

SourcePointer handles type were only the source is a pointer.

func (*SourcePointer) Build added in v0.17.0

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 added in v0.17.0

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.

type UseUnderlyingTypeMethods added in v1.1.0

type UseUnderlyingTypeMethods struct{}

UseUnderlyingTypeMethods handles UseUnderlyingTypeMethods.

func (*UseUnderlyingTypeMethods) Build added in v1.1.0

func (*UseUnderlyingTypeMethods) 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 (*UseUnderlyingTypeMethods) Matches added in v1.1.0

func (*UseUnderlyingTypeMethods) Matches(ctx *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