builder

package
v0.0.0-...-40449d9 Latest Latest
Warning

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

Go to latest
Published: Sep 28, 2022 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(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(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(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

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
	Call *jen.Statement
	// optional source
	Source *xtype.Type
	Target *xtype.Type

	Jen jen.Code
}

type Generator

type Generator interface {
	Build(
		ctx *MethodContext,
		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(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(source, target *xtype.Type) bool

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

type MethodContext

type MethodContext struct {
	*namer.Namer
	Mapping                map[string]string
	ExtendMapping          map[string]*ExtendMethod
	IgnoredFields          map[string]struct{}
	IgnoreUnexportedFields bool
	IdentityMapping        map[string]struct{}
	Signature              xtype.Signature
	TargetType             *xtype.Type
	PointerChange          bool
	MatchIgnoreCase        bool
	WrapErrors             bool
}

MethodContext exposes information for the current method.

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(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(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(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