SimpleGenerator

package module
v0.6.1 Latest Latest
Warning

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

Go to latest
Published: Jan 19, 2025 License: GPL-3.0 Imports: 11 Imported by: 0

README

Fork GitHub Release Tests

Go Report Card

GitHub repo file or directory count GitHub code size in bytes GitHub repo size

SimpleGenerator

Simple Go-file generator. No syntax checking. Autostyling.

INSTALL

go get -u github.com/Bookshelf-Writer/SimpleGenerator

INITIALIZATION

Methods:

NewFile(packageName)
var obj *GeneratorObj = NewFile("package_name")

Initialization by package name. The default directory is the launch point.

NewFilePath(packagePath)
var obj *GeneratorObj = NewFilePath("package/path/name")

Initialization along the path to the directory. The name of the last directory is the name of the package.

NewFilePathName(packagePath, packageName)
var obj *GeneratorObj = NewFilePathName("package_name", "package/path/name")

Initialization along the directory path indicating a custom package name.


IMPORT

Methods:

NewImport(path, alias)
var path string = obj.NewImport("github.com/dave/jennifer/jen", "")

Adding a new import with the ability to specify an alias. The _ and . aliases are not currently supported.

NewTypeImport(path, name)
var JenFileType *GeneratorUserTypeObj = obj.NewTypeImport("github.com/dave/jennifer/jen", "File")

Initializing a specific type from an import. If a package with a similar path has not been initialized before, initialization will occur automatically.

NewType(name)
var GlobalTypeNameType *GeneratorUserTypeObj = obj.NewType("GlobalTypeName")

Initialize a third party type visible within the package.

AddType(name, interface)
var NewLocalType *GeneratorUserTypeObj = obj.AddType("NewLocal", byte(0))

Initialize a local type by specifying the base type. Adds this type to the generation if this type has not been initialized previously.

AddObjStruct(interface)
obj.AddObjStruct(MyObj)

Recursively forms a structure based on the passed object. Does not support any modifiers, sorting the output alphabetically.

AddObjValue(name, interface)
obj.AddObjValue("ValueNameObj", ValueNameObj)

It recursively goes through the structure and forms a data object. All basic types and nesting of non-standard ones are supported.


EXAMPLE

Generator:

var obj = SimpleGenerator.NewFilePathName("example", "main")

func main() {
	obj.NewImport("github.com/dave/jennifer/jen", "exAlias")

	jenFile := obj.NewTypeImport("github.com/dave/jennifer/jen", "File")
	timeDuration := obj.NewTypeImport("time", "Duration")

	//

	obj.Comment("Initializing simple constants")
	obj.AddConst(map[string]SimpleGenerator.GeneratorValueObj{
		"testConst1": {Val: 1234, Types: timeDuration, Comment: jenFile.Name()},
		"testConst2": {Val: "text", Types: obj.TypeString(), Format: ""},
	})

	obj.Comment("Initializing structure")
	testStruct := obj.AddStruct("testStruct", map[string]SimpleGenerator.GeneratorTypeObj{
		"ttt1": {Types: jenFile, IsLink: true},
		"ttt2": {Types: timeDuration, IsArray: 4},
	})

	obj.Comment("Creating a Function")
	obj.AddFunc(
		"TestFunc",
		map[string]SimpleGenerator.GeneratorTypeObj{
			"name": {Types: obj.TypeString()},
		},
		map[string]SimpleGenerator.GeneratorTypeObj{
			"err": {Types: obj.TypeError()},
		},
		testStruct,
		func(gen *SimpleGenerator.GeneratorObj) {
			gen.PrintLN("if name == testConst2 {")
			gen.Offset(1).WriteString("err = parent.ttt1.Save(name)").LN()
			gen.PrintLN("}")
		},
		func(gen *SimpleGenerator.GeneratorObj) {
			gen.LN().AddConst(map[string]SimpleGenerator.GeneratorValueObj{
				"funcConst": {Val: "text", Types: gen.TypeString(), Format: ""},
			})
		},
	)

	obj.SeparatorX8().LN()

	obj.Comment("Initializing a map")
	obj.AddMap("exList", obj.TypeString(), obj.TypeBool(), map[SimpleGenerator.GeneratorValueObj]SimpleGenerator.GeneratorValueObj{
		{Val: "1", Format: ""}: {Val: true},
		{Val: "3", Format: ""}: {Val: true},
		{Val: "2", Format: ""}: {Val: false, Comment: "hello"},
	})

	obj.SeparatorX8().LN()

	obj.Comment("Creating an ENUM-like structure")
	obj.ConstructEnum("User", "Users", byte(0), map[string]SimpleGenerator.GeneratorValueObj{
		"Def":    {Val: 0},
		"Su":     {Val: 3, Comment: "superuser"},
		"Normal": {Val: 1},
		"Admin":  {Val: 2},
	})

	obj.SeparatorX8().LN()

	obj.AddValue(map[string]SimpleGenerator.GeneratorValueObj{
		"Ok":    {Val: "1", Types: obj.TypeString(), Format: ""},
		"NotOk": {Val: 1, Types: obj.TypeString(), Format: ""},
	})

	//

	for p, err := range obj.Errors() {
		fmt.Println(p, "\t", err)
	}
	fmt.Println(obj.Save("GENERATE.go"))
}
Generated code:
/**  This file is automatically generated  **/
/**  File generator: main.go:85  **/

package main

import (
	exAlias "github.com/dave/jennifer/jen"
	"time"
)

////////////////////////////////////////////////////////////////

// Initializing simple constants
const (
	testConst1 time.Duration = 1234 // exAlias.File
	testConst2 string        = "text"
)

// Initializing structure
type testStructObj struct {
	ttt1 *exAlias.File
	ttt2 [4]time.Duration
}

// Creating a Function
func (parent *testStructObj) TestFunc(name string) (err error) {
	if name == testConst2 {
		err = parent.ttt1.Save(name)
	}

	const funcConst string = "text"

	return
}

////////////////////////////////

// Initializing a map
var exListMap = map[string]bool{
	"1": true,
	"2": false, // hello
	"3": true,
}

////////////////////////////////

// Creating an ENUM-like structure
type UsersType uint8

const (
	UserDef    UsersType = 0
	UserNormal UsersType = 1
	UserAdmin  UsersType = 2
	UserSu     UsersType = 3 // superuser
)

////////////////////////////////

var (
	NotOk string = "%!s(int=1)"
	Ok    string = "1"
)


Mirrors

Documentation

Index

Constants

View Source
const (
	GlobalName       string = "SimpleGenerator"
	GlobalDateUpdate string = "01-19-2025"
	GlobalHash       string = "8bd1c3f5711200f31e4a6803b9ab716ece2f7a75"

	GlobalVersion      string = "v0.6.1"
	GlobalVersionMajor string = "v0"
	GlobalVersionMinor uint16 = 6
	GlobalVersionPatch uint16 = 1
)

Variables

This section is empty.

Functions

This section is empty.

Types

type GeneratorObj

type GeneratorObj struct {
	// contains filtered or unexported fields
}

func NewFile

func NewFile(packageName string) *GeneratorObj

func NewFilePath

func NewFilePath(packagePath string) *GeneratorObj

func NewFilePathName

func NewFilePathName(packagePath, packageName string) *GeneratorObj

func (*GeneratorObj) AddConst

func (gen *GeneratorObj) AddConst(vals map[string]GeneratorValueObj) *GeneratorObj

AddConst Adding an Array of Constants

func (*GeneratorObj) AddFunc

func (gen *GeneratorObj) AddFunc(
	name string,
	input, output map[string]GeneratorTypeObj,
	parent *GeneratorUserTypeObj,
	body ...func(gen *GeneratorObj),
)

AddFunc Adding a Method

func (*GeneratorObj) AddInterface

func (gen *GeneratorObj) AddInterface(name string, vals map[string]GeneratorTypeObj) *GeneratorUserTypeObj

AddInterface Adding an interface description using an array of variables

func (*GeneratorObj) AddMap

AddMap Adding a map by array of values

func (*GeneratorObj) AddObjStruct added in v0.3.0

func (gen *GeneratorObj) AddObjStruct(obj interface{}) *GeneratorObj

func (*GeneratorObj) AddObjValue added in v0.3.0

func (gen *GeneratorObj) AddObjValue(valName string, v interface{}) *GeneratorObj

func (*GeneratorObj) AddStruct

func (gen *GeneratorObj) AddStruct(name string, vals map[string]GeneratorTypeObj) *GeneratorUserTypeObj

AddStruct Adding a structure description based on an array of variables

func (*GeneratorObj) AddType

func (gen *GeneratorObj) AddType(name string, i interface{}) *GeneratorUserTypeObj

func (*GeneratorObj) AddValue

func (gen *GeneratorObj) AddValue(vals map[string]GeneratorValueObj) *GeneratorObj

AddValue Adding an Array of Variables

func (*GeneratorObj) Comment

func (gen *GeneratorObj) Comment(text string) *GeneratorObj

func (*GeneratorObj) CommentFormat

func (gen *GeneratorObj) CommentFormat(text string) *GeneratorObj

func (*GeneratorObj) ConstructEnum

func (gen *GeneratorObj) ConstructEnum(
	name string,
	typeName string,
	typeInterface interface{},
	values map[string]GeneratorValueObj,
) *GeneratorObj

func (*GeneratorObj) Del

func (gen *GeneratorObj) Del(len int) *GeneratorObj

func (*GeneratorObj) Errors

func (gen *GeneratorObj) Errors() []error

func (*GeneratorObj) Hex

func (gen *GeneratorObj) Hex(a ...any) *GeneratorObj

func (*GeneratorObj) HexLN

func (gen *GeneratorObj) HexLN(a ...any) *GeneratorObj

func (*GeneratorObj) LN

func (gen *GeneratorObj) LN() *GeneratorObj

func (*GeneratorObj) Len

func (gen *GeneratorObj) Len() int

func (*GeneratorObj) NewImport

func (gen *GeneratorObj) NewImport(path, alias string) string

func (*GeneratorObj) NewType

func (gen *GeneratorObj) NewType(name string) *GeneratorUserTypeObj

func (*GeneratorObj) NewTypeImport

func (gen *GeneratorObj) NewTypeImport(path, name string) *GeneratorUserTypeObj

func (*GeneratorObj) Number

func (gen *GeneratorObj) Number(a ...any) *GeneratorObj

func (*GeneratorObj) NumberLN

func (gen *GeneratorObj) NumberLN(a ...any) *GeneratorObj

func (*GeneratorObj) Offset

func (gen *GeneratorObj) Offset(size int) *GeneratorObj

func (*GeneratorObj) OffsetAdd

func (gen *GeneratorObj) OffsetAdd() *GeneratorObj

func (*GeneratorObj) OffsetRemove

func (gen *GeneratorObj) OffsetRemove() *GeneratorObj

func (*GeneratorObj) Print

func (gen *GeneratorObj) Print(text string) *GeneratorObj

func (*GeneratorObj) PrintLN

func (gen *GeneratorObj) PrintLN(text string) *GeneratorObj

func (*GeneratorObj) Render

func (gen *GeneratorObj) Render(w io.Writer) (err error)

func (*GeneratorObj) Repeat

func (gen *GeneratorObj) Repeat(chat string, size int) *GeneratorObj

func (*GeneratorObj) Save

func (gen *GeneratorObj) Save(filename string) error

func (*GeneratorObj) SeparatorX1

func (gen *GeneratorObj) SeparatorX1() *GeneratorObj

func (*GeneratorObj) SeparatorX2

func (gen *GeneratorObj) SeparatorX2() *GeneratorObj

func (*GeneratorObj) SeparatorX3

func (gen *GeneratorObj) SeparatorX3() *GeneratorObj

func (*GeneratorObj) SeparatorX4

func (gen *GeneratorObj) SeparatorX4() *GeneratorObj

func (*GeneratorObj) SeparatorX5

func (gen *GeneratorObj) SeparatorX5() *GeneratorObj

func (*GeneratorObj) SeparatorX6

func (gen *GeneratorObj) SeparatorX6() *GeneratorObj

func (*GeneratorObj) SeparatorX7

func (gen *GeneratorObj) SeparatorX7() *GeneratorObj

func (*GeneratorObj) SeparatorX8

func (gen *GeneratorObj) SeparatorX8() *GeneratorObj

func (*GeneratorObj) Sprintf

func (gen *GeneratorObj) Sprintf(format string, a ...any) *GeneratorObj

func (*GeneratorObj) String

func (gen *GeneratorObj) String(a ...any) *GeneratorObj

func (*GeneratorObj) StringLN

func (gen *GeneratorObj) StringLN(a ...any) *GeneratorObj

func (*GeneratorObj) TypeAny

func (gen *GeneratorObj) TypeAny() *GeneratorUserTypeObj

func (*GeneratorObj) TypeBool

func (gen *GeneratorObj) TypeBool() *GeneratorUserTypeObj

func (*GeneratorObj) TypeByte

func (gen *GeneratorObj) TypeByte() *GeneratorUserTypeObj

func (*GeneratorObj) TypeComparable

func (gen *GeneratorObj) TypeComparable() *GeneratorUserTypeObj

func (*GeneratorObj) TypeComplex128

func (gen *GeneratorObj) TypeComplex128() *GeneratorUserTypeObj

func (*GeneratorObj) TypeComplex64

func (gen *GeneratorObj) TypeComplex64() *GeneratorUserTypeObj

func (*GeneratorObj) TypeError

func (gen *GeneratorObj) TypeError() *GeneratorUserTypeObj

func (*GeneratorObj) TypeFloat32

func (gen *GeneratorObj) TypeFloat32() *GeneratorUserTypeObj

func (*GeneratorObj) TypeFloat64

func (gen *GeneratorObj) TypeFloat64() *GeneratorUserTypeObj

func (*GeneratorObj) TypeInt

func (gen *GeneratorObj) TypeInt() *GeneratorUserTypeObj

func (*GeneratorObj) TypeInt16

func (gen *GeneratorObj) TypeInt16() *GeneratorUserTypeObj

func (*GeneratorObj) TypeInt32

func (gen *GeneratorObj) TypeInt32() *GeneratorUserTypeObj

func (*GeneratorObj) TypeInt64

func (gen *GeneratorObj) TypeInt64() *GeneratorUserTypeObj

func (*GeneratorObj) TypeInt8

func (gen *GeneratorObj) TypeInt8() *GeneratorUserTypeObj

func (*GeneratorObj) TypeRune

func (gen *GeneratorObj) TypeRune() *GeneratorUserTypeObj

func (*GeneratorObj) TypeString

func (gen *GeneratorObj) TypeString() *GeneratorUserTypeObj

func (*GeneratorObj) TypeTimeDuration

func (gen *GeneratorObj) TypeTimeDuration() *GeneratorUserTypeObj

func (*GeneratorObj) TypeTimeLocation

func (gen *GeneratorObj) TypeTimeLocation() *GeneratorUserTypeObj

func (*GeneratorObj) TypeTimeTicker

func (gen *GeneratorObj) TypeTimeTicker() *GeneratorUserTypeObj

func (*GeneratorObj) TypeTimeTime

func (gen *GeneratorObj) TypeTimeTime() *GeneratorUserTypeObj

func (*GeneratorObj) TypeTimeTimer

func (gen *GeneratorObj) TypeTimeTimer() *GeneratorUserTypeObj

func (*GeneratorObj) TypeUInt

func (gen *GeneratorObj) TypeUInt() *GeneratorUserTypeObj

func (*GeneratorObj) TypeUInt16

func (gen *GeneratorObj) TypeUInt16() *GeneratorUserTypeObj

func (*GeneratorObj) TypeUInt32

func (gen *GeneratorObj) TypeUInt32() *GeneratorUserTypeObj

func (*GeneratorObj) TypeUInt64

func (gen *GeneratorObj) TypeUInt64() *GeneratorUserTypeObj

func (*GeneratorObj) TypeUInt8

func (gen *GeneratorObj) TypeUInt8() *GeneratorUserTypeObj

func (*GeneratorObj) TypeUIntPtr

func (gen *GeneratorObj) TypeUIntPtr() *GeneratorUserTypeObj

func (*GeneratorObj) Write

func (gen *GeneratorObj) Write(data []byte) *GeneratorObj

func (*GeneratorObj) WriteString

func (gen *GeneratorObj) WriteString(data string) *GeneratorObj

type GeneratorTypeObj

type GeneratorTypeObj struct {
	Comment string

	Types   *GeneratorUserTypeObj
	Tags    map[string]string
	IsLink  bool
	IsArray int
}

func (*GeneratorTypeObj) String

func (s *GeneratorTypeObj) String() string

type GeneratorUserTypeObj

type GeneratorUserTypeObj struct {
	// contains filtered or unexported fields
}

func (*GeneratorUserTypeObj) Name

func (t *GeneratorUserTypeObj) Name() string

type GeneratorValueObj

type GeneratorValueObj struct {
	Val     any
	Format  any
	Comment string

	Types *GeneratorUserTypeObj
}

func (*GeneratorValueObj) String

func (v *GeneratorValueObj) String() string

Jump to

Keyboard shortcuts

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