Documentation
¶
Overview ¶
Package vogen provides a code generator for Value Objects in Go. Value Objects are immutable objects that represent a value.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ( // ErrStructNameEmpty is an error that occurs when the StructName is not set. ErrStructNameEmpty = errors.New("vogen: ValueObject 'StructName() is not set") // ErrInvalidField is an error that occurs when the Field is not set. ErrInvalidField = errors.New("vogen: ValueObject 'Field' is not set") // ErrInvalidFieldName is an error that occurs when the Field 'Name' is not set. ErrInvalidFieldName = errors.New("vogen: ValueObject 'Field.Name' is not set") // ErrInvalidFieldType is an error that occurs when the Field 'Type' is not set. ErrInvalidFieldType = errors.New("vogen: ValueObject 'Field.Type' is not set") // ErrInvalidFilePath is an error that occurs when the file path is not set. ErrInvalidFilePath = errors.New("vogen: file path is not set") // ErrInvalidPackageName is an error that occurs when the package name is not set. ErrInvalidPackageName = errors.New("vogen: package name is not set") )
Functions ¶
This section is empty.
Types ¶
type Field ¶
type Field struct {
// Name is the name of the field to be generated.
// The name specified in Name is always converted to 'lowerCamelCase'.
// Required field.
Name string
// Type is the type of the field to be generated.
// Type can be a primitive type or a Defined type. If you specify a Defined type, you must specify package import.
// Required field.
Type string
// Comments is the field comment to be generated.
// No need to add '//' to indicate the start of a comment.
// Optional Field. If not specified, the field comment is to be empty.
Comments []string
// Validators is the list of validators to be generated.
// The validation code is written within the New method. No check is made to see if the validation can be performed.
// For example, it is possible to generate code that performs minimum value validation (incorrect code) for a string type.
// Optional Field.
Validators []Validator
}
Field is set to the metadata of the field to be automatically generated.
type MaxValueValidator ¶
type MaxValueValidator struct {
// contains filtered or unexported fields
}
MaxValueValidator is a Max Value Validator.
type MinValueValidator ¶
type MinValueValidator struct {
// contains filtered or unexported fields
}
MinValueValidator is a Min Value Validator.
type NegativeValueValidator ¶
type NegativeValueValidator struct{}
NegativeValueValidator is a Negative Value Validator.
type Option ¶
Option is a parameter to be specified when creating a new Vogen struct.
func WithFilePath ¶
WithFilePath specifies the file path to be generated.
func WithPackageName ¶
WithPackageName specifies the package name to be generated.
type PositiveValueValidator ¶
type PositiveValueValidator struct{}
PositiveValueValidator is a Positive Value Validator.
type RangeValueValidator ¶
type RangeValueValidator struct {
// contains filtered or unexported fields
}
RangeValueValidator is a Range Value Validator.
type StringLengthValidator ¶
type StringLengthValidator struct {
// contains filtered or unexported fields
}
StringLengthValidator is a String Length Validator.
type Validator ¶
type Validator interface {
// contains filtered or unexported methods
}
Validator represents a validator.
func NewMaxValueValidator ¶
NewMaxValueValidator returns a new Max Value Validator. MaxValueValidator checks if the value exceeds the maximum value.
func NewMinValueValidator ¶
NewMinValueValidator returns a new Min Value Validator. MinValueValidator checks if the value is less than the minimum value.
func NewNegativeValueValidator ¶
func NewNegativeValueValidator() Validator
NewNegativeValueValidator returns a new Negative Value Validator. NegativeValueValidator checks if the value is negative.
func NewPositiveValueValidator ¶
func NewPositiveValueValidator() Validator
NewPositiveValueValidator returns a new Positive Value Validator.
func NewRangeValueValidator ¶
NewRangeValueValidator returns a new Range Value Validator. RangeValueValidator checks if the value is out of range.
func NewStringLengthValidator ¶
NewStringLengthValidator returns a new String Length Validator. StringLengthValidator checks if the string length is out of range.
type ValueObject ¶
type ValueObject struct {
// StructName is the name of the struct to be generated.
// Required field.
StructName string
// Fields is the list of fields to be generated.
// Required field.
Fields []Field
// Comments is the struct comment to be generated.
// No need to add '//' to indicate the start of a comment.
// Optional Field. If not specified, the struct comment is automatically generated.
Comments []string
// Imports is the list of imports to be generated.
// Optional Field.
Imports []string
}
ValueObject is set to the metadata of the ValueObject to be automatically generated.
type Vogen ¶
type Vogen struct {
// contains filtered or unexported fields
}
Vogen is the main struct of the vogen package. Vogen generates a ValueObject based on the metadata set in ValueObject.
func (*Vogen) AppendValueObjects ¶
func (vo *Vogen) AppendValueObjects(vos ...ValueObject) error
AppendValueObjects appends ValueObjects to the Vogen struct.
func (*Vogen) Generate ¶
Generate generates ValueObject code and writes it to the specified file path.
Example ¶
package main
import (
"fmt"
"path/filepath"
"github.com/nao1215/vogen"
)
func main() {
// Step 1: Create a Vogen instance with custom file path and package name
gen, err := vogen.New(
vogen.WithFilePath(filepath.Join("testdata", "example_output.go")),
vogen.WithPackageName("vo_example"),
)
if err != nil {
fmt.Printf("Failed to create Vogen instance: %v\n", err)
return
}
// Step 2: Append the ValueObject definition
if err := gen.AppendValueObjects(
vogen.ValueObject{
StructName: "Person",
Fields: []vogen.Field{
{
Name: "Name", Type: "string",
Comments: []string{"Name is the name of the person."},
Validators: []vogen.Validator{
vogen.NewStringLengthValidator(0, 120),
},
},
{
Name: "Age", Type: "int",
Comments: []string{"Age is the age of the person."},
Validators: []vogen.Validator{
vogen.NewPositiveValueValidator(),
vogen.NewMaxValueValidator(120),
}},
},
Comments: []string{
"Person is a Value Object to describe the feature of vogen.",
"This is sample comment.",
},
},
// Use auto generated comments.
vogen.ValueObject{
StructName: "Address",
Fields: []vogen.Field{
{Name: "City", Type: "string"},
},
},
); err != nil {
fmt.Printf("Failed to append ValueObject: %v\n", err)
return
}
// Step 3: Generate the code
if err := gen.Generate(); err != nil {
fmt.Printf("Failed to generate code: %v\n", err)
return
}
fmt.Println("Code generated successfully. Check 'example_output.go' for the output.")
}
Output: Code generated successfully. Check 'example_output.go' for the output.