gen

package
v0.7.0 Latest Latest
Warning

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

Go to latest
Published: Sep 16, 2024 License: MIT Imports: 21 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// DatabaseTemplates 保存database将要生成的文件的模版信息
	DatabaseTemplates []InstanceTemplate = []InstanceTemplate{
		{
			Name:   "database",
			Format: pkgf("d_%s.go"),
		},
		{
			Name:   "sql/table",
			Format: pkgf("sql/%s.sql"),
		},
	}
	// EntityTemplates entity的相关模版
	EntityTemplates []InstanceTemplate = []InstanceTemplate{
		{
			Name:   "entity/builder",
			Format: pkgf("e_%s_builder.go"),
		},
		{
			Name:   "entity/entity",
			Format: pkgf("e_%s_entity.go"),
		},
		{
			Name:   "entity/fields",
			Format: pkgf("e_%s_fields.go"),
		},
		{
			Name:   "entity/create",
			Format: pkgf("e_%s_create.go"),
		},
		{
			Name:   "entity/delete",
			Format: pkgf("e_%s_delete.go"),
		},
		{
			Name:   "entity/query",
			Format: pkgf("e_%s_query.go"),
		},
		{
			Name:   "entity/update",
			Format: pkgf("e_%s_update.go"),
		},
		{
			Name: "entity/meta",
			Format: func(t template.TemplatePathFormat) string {
				return fmt.Sprintf("%[1]s/%[1]s.go", t.Dir())
			},
		},
		{
			Name:   "entity/where",
			Format: pkgf("%s/where.go"),
		},
		{
			Name:   "entity/order",
			Format: pkgf("%s/order.go"),
		},
		{
			Name:   "rel/entity",
			Format: pkgf("e_%s_rel.go"),
		},
	}
	// InstanceTemplates 内部使用的模版
	InstanceTemplates []GenericTemplate = []GenericTemplate{
		{
			Name:   "internal/core",
			Format: "internal/core.go",
		},
		{
			Name:   "rel/rels",
			Format: "rels.go",
		},
	}
	// ExtraCodesTemplates 额外的代码模版
	ExtraCodesTemplates []GenericTemplate = []GenericTemplate{
		{
			Name:   "extraCode",
			Format: "extra_codes.go",
		},
	}

	// SqlTemplates sql文件的模版
	SqlTemplates []GenericTemplate = []GenericTemplate{}
)

Functions

func PrepareEnv

func PrepareEnv(c *Config) (undo func() error, err error)

PrepareEnv 检查是否有runtime.go,如果存在检查导入部分,避免循环导入 如果不存在则创建runtime.go文件 如果存在导入部分则在文件开头添加 "// +build tools\n" 这样在生成代码时,runtime.go文件不会被编译到最终的二进制文件中

Params:

  • c: 代码生成的配置。

Returns:

0: 无操作函数。
1: 错误信息。

func ValidSchemaName added in v0.5.0

func ValidSchemaName(name string) error

ValidSchemaName 确定一个名字是否会与任何预定义的名字冲突。

Params:

  • name: 名字。

Types

type Builder

type Builder struct {
	*Config
	// Nodes是Schema中的database info的集合。
	Nodes     []*DatabaseInfo
	EntityMap load.EntityMap
}

Builder 用于生成资源文件的构建器。

func NewBuilder

func NewBuilder(c *Config, databases ...*load.Database) (s *Builder, err error)

NewBuilder 根据提供的Schema,初始化一个生成器。

Params:

  • c: 代码生成的配置。
  • entities: 从entity package中加载的所有entity。

Returns:

0: 生成器。
1: 错误信息。

func (*Builder) Gen

func (b *Builder) Gen() error

Gen 调用符合Generator接口的函数生成代码。

type Config

type Config struct {
	// Target 保存生成的代码的目标路径。
	//
	// 默认情况下,代码生成器将生成代码到和Package上一级目录。
	// 例如,"tentity generate ./entity/schema",则生成的代码将放在"./entity"目录下。
	Target string

	// BuildFlags 保存生成代码时传递给go build的标志。
	BuildFlags []string

	// Package 定义了上面的Target目录下,Go package的路径,比如“package gen”,则
	// Package为"gen"
	//
	// "generate project/entity" 或者在项目根目录下 "generate ./entity",
	// 然后会获得执行路径下文件的Go package作为Package
	Package string

	// Header 它允许用户为生成的文件提供一个可选的头部签名。
	// 默认情况下,这个头部签名遵循标准的 'go generate' 格式,
	// 即 '// Code generated by ent, DO NOT EDIT.'
	Header string

	// Hooks 可选的hook列表,用于代码生成前、后在表上执行
	Hooks []Hook

	// IDType 指定代码生成中id字段的类型
	// 默认情况下,id字段的类型是int或者string
	IDType *field.TypeInfo

	// Templates 外部传入的template
	Templates []*template.Template

	// ExtraCodes 保存额外的代码,它将被添加到生成的代码中
	ExtraCodes []string
}

Config 代码生成的全局配置,并在所有生成的节点之间共享

type DatabaseInfo added in v0.5.0

type DatabaseInfo struct {
	*Config
	Database *load.Database
}

DatabaseInfo 表示一个Builder中的一个数据库节点的信息

func NewDatabaseInfo added in v0.5.0

func NewDatabaseInfo(c *Config, database *load.Database) (*DatabaseInfo, error)

NewDatabaseInfo 初始化一个DatabaseInfo

Params:

  • c: 代码生成的配置。
  • database: 从entity package中加载的数据库。

Returns:

0: 数据库信息。
1: 错误信息。

func (DatabaseInfo) Dir added in v0.5.0

func (t DatabaseInfo) Dir() string

Dir 返回包目录名称

type EntityInfo

type EntityInfo struct {
	*Config
	Entity   *load.Entity
	Database *load.Database
}

EntityInfo 表示一个Builder中的一个实体节点的信息

func NewEntityInfo

func NewEntityInfo(c *Config, entity *load.Entity, database *load.Database) (*EntityInfo, error)

NewEntityInfo 初始化一个EntityInfo

Params:

  • c: 代码生成的配置。
  • entity: 从entity package中加载的实体。

Returns:

0: 实体信息。
1: 错误信息。

func (EntityInfo) Dir

func (t EntityInfo) Dir() string

Dir 返回包目录名称

type FieldInfo added in v0.7.0

type FieldInfo struct {
	*Config
	Type   string
	Field  *load.Field
	Entity *load.Entity
}

func NewFieldInfo added in v0.7.0

func NewFieldInfo(c *Config, field *load.Field, entity *load.Entity, t dialect.DbDriver) (*FieldInfo, error)

func (FieldInfo) Dir added in v0.7.0

func (t FieldInfo) Dir() string

Dir 返回包目录名称

type GenerateFunc

type GenerateFunc func(*Builder) error

GenerateFunc 符合Generator接口的函数。

func (GenerateFunc) Generate

func (f GenerateFunc) Generate(t *Builder) error

Generate 生成代码。

Params:

  • f: 生成函数。

type Generator

type Generator interface {
	// Generate 为提供的Builder生成代码
	Generate(*Builder) error
}

Generator 代码生成器接口。

type GenericTemplate

type GenericTemplate struct {
	Name   string
	Format string
	Skip   func(*Builder) bool
}

GenericTemplate 是生成代码中给每个InstanceTemplate使用的通用部分

type Hook

type Hook func(Generator) Generator

Hook 代码生成的钩子。

type InstanceTemplate

type InstanceTemplate = template.FileTemplate[any]

InstanceTemplate 模版实例

Jump to

Keyboard shortcuts

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