gen

package
v0.29.0 Latest Latest
Warning

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

Go to latest
Published: Nov 20, 2024 License: MIT Imports: 29 Imported by: 1

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ModelTemplates, _       = fs.Sub(templates, "templates/models")
	FactoryTemplates, _     = fs.Sub(templates, "templates/factory")
	MySQLModelTemplates, _  = fs.Sub(mysqlTemplates, "bobgen-mysql/templates/models")
	PSQLModelTemplates, _   = fs.Sub(psqlTemplates, "bobgen-psql/templates/models")
	SQLiteModelTemplates, _ = fs.Sub(sqliteTemplates, "bobgen-sqlite/templates/models")
)

Functions

func NormalizeType added in v0.28.0

func NormalizeType(val string) string

func Run added in v0.17.2

func Run[T, C, I any](ctx context.Context, s *State[C], driver drivers.Interface[T, C, I], plugins ...Plugin) error

Run executes the templates and outputs them to files based on the state given.

Types

type Config

type Config[ConstraintExtra any] struct {
	// Struct tags to generate
	Tags []string `yaml:"tags"`
	// Disable generating factories for models
	NoFactory bool `yaml:"no_factory"`
	// Disable generating go test files
	NoTests bool `yaml:"no_tests"`
	// Disable back referencing in the loaded relationship structs
	NoBackReferencing bool `yaml:"no_back_referencing"`
	// Delete the output folder (rm -rf) before generation to ensure sanity
	Wipe bool `yaml:"wipe"`
	// Decides the casing for go structure tag names. camel, title or snake (default snake)
	StructTagCasing string `yaml:"struct_tag_casing"`
	// Relationship struct tag name
	RelationTag string `yaml:"relation_tag"`
	// List of column names that should have tags values set to '-' (ignored during parsing)
	TagIgnore []string `yaml:"tag_ignore"`

	Types         drivers.Types                `yaml:"types"`         // register custom types
	Aliases       drivers.Aliases              `yaml:"aliases"`       // customize aliases
	Constraints   Constraints[ConstraintExtra] `yaml:"constraints"`   // define additional constraints
	Relationships Relationships                `yaml:"relationships"` // define additional relationships

	Replacements []Replace   `yaml:"replacements"`
	Inflections  Inflections `yaml:"inflections"`

	// Customize the generator name in the top level comment of generated files
	// >>   Code generated by **GENERATOR NAME**. DO NOT EDIT.
	// defaults to "BobGen [driver] [version]"
	Generator string `yaml:"generator"`
}

Config for the running of the commands

type Constraints added in v0.23.0

type Constraints[C any] map[string]drivers.Constraints[C]

type DBInfoPlugin added in v0.20.0

type DBInfoPlugin[T, C, I any] interface {
	Plugin
	PlugDBInfo(*drivers.DBInfo[T, C, I]) error
}

DBInfoPlugin is called immediately after the database information is assembled from the driver

type Importer

type Importer map[string]struct{}

func (Importer) Import

func (i Importer) Import(pkgs ...string) string

To be used inside templates to record an import. Always returns an empty string

func (Importer) ImportList

func (i Importer) ImportList(list importers.List) string

func (Importer) ToList

func (i Importer) ToList() importers.List

type Inflections

type Inflections struct {
	Plural        map[string]string `yaml:"plural"`
	PluralExact   map[string]string `yaml:"plural_exact"`
	Singular      map[string]string `yaml:"singular"`
	SingularExact map[string]string `yaml:"singular_exact"`
	Irregular     map[string]string `yaml:"irregular"`
}

type Output

type Output struct {
	// The key has to be unique in a gen.State
	// it also makes it possible to target modifing a specific output
	Key string

	PkgName   string
	OutFolder string
	Templates []fs.FS
	// contains filtered or unexported fields
}

type Plugin added in v0.20.0

type Plugin interface {
	Name() string
}

type Relationships added in v0.23.0

type Relationships map[string][]orm.Relationship

func (Relationships) Get added in v0.23.0

func (r Relationships) Get(table string) []orm.Relationship

func (Relationships) GetInverse added in v0.23.0

func (rs Relationships) GetInverse(r orm.Relationship) orm.Relationship

GetInverse returns the Relationship of the other side

type Replace

type Replace struct {
	Tables  []string       `yaml:"tables"`
	Match   drivers.Column `yaml:"match"`
	Replace string         `yaml:"replace"`
}

Replace replaces a column type with something else

type State

type State[ConstraintExtra any] struct {
	Config              Config[ConstraintExtra]
	Outputs             []*Output
	CustomTemplateFuncs template.FuncMap
}

State holds the global data needed by most pieces to run

type StatePlugin added in v0.20.0

type StatePlugin[ConstraintExtra any] interface {
	Plugin
	PlugState(*State[ConstraintExtra]) error
}

This is called at the very beginning if there are any changes to be made to the state

type TemplateData added in v0.20.0

type TemplateData[T, C, I any] struct {
	Dialect  string
	Importer Importer

	Table         drivers.Table[C, I]
	Tables        drivers.Tables[C, I]
	Enums         []drivers.Enum
	Aliases       drivers.Aliases
	Types         drivers.Types
	Relationships Relationships

	// Controls what names are output
	PkgName string

	// Control various generation features
	AddSoftDeletes    bool
	AddEnumTypes      bool
	EnumNullPrefix    string
	NoFactory         bool
	NoTests           bool
	NoBackReferencing bool

	// Tags control which tags are added to the struct
	Tags []string
	// RelationTag controls the value of the tags for the Relationship struct
	RelationTag string
	// Generate struct tags as camelCase or snake_case
	StructTagCasing string
	// Contains field names that should have tags values set to '-'
	TagIgnore map[string]struct{}

	// Supplied by the driver
	ExtraInfo     T
	ModelsPackage string

	// DriverName is the module name of the underlying `database/sql` driver
	DriverName string
}

func (*TemplateData[T, C, I]) ResetImports added in v0.20.0

func (t *TemplateData[T, C, I]) ResetImports()

type TemplateDataPlugin added in v0.20.0

type TemplateDataPlugin[T, C, I any] interface {
	Plugin
	PlugTemplateData(*TemplateData[T, C, I]) error
}

TemplateDataPlugin is called right after assembling the template data, before generating them for each output. NOTE: The PkgName field is overwritten for each output, so mofifying it in a plugin will have no effect. Use a StatePlugin instead

Directories

Path Synopsis
Package drivers talks to various database backends and retrieves table, column, type, and foreign key information
Package drivers talks to various database backends and retrieves table, column, type, and foreign key information
Package importers helps with dynamic imports for templating
Package importers helps with dynamic imports for templating

Jump to

Keyboard shortcuts

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