cuegen

package
v1.8.0-beta.3 Latest Latest
Warning

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

Go to latest
Published: Apr 7, 2023 License: Apache-2.0 Imports: 13 Imported by: 0

README

CUE Generator

Auto generation of CUE schema and docs from Go struct

Type Conversion

  • All comments will be copied to CUE schema

Basic Types

Go Type CUE Type
int int
int8 int8
int16 int16
int32 int32
int64 int64
uint uint
uint8 uint8
uint16 uint16
uint32 uint32
uint64 uint64
float32 float32
float64 float64
string string
bool bool
nil null
byte uint8
uintptr uint64
[]byte bytes
interface{}/any {...}
interface{ ... } _

Map Type

  • CUE only supports map[string]T type, which is converted to [string]: T in CUE schema
  • All map[string]any/map[string]interface{} are converted to {...} in CUE schema

Struct Type

  • Fields will be expanded recursively in CUE schema
  • All unexported fields will be ignored
  • Do not support recursive struct type, which will cause infinite loop

json Tag:

  • Fields with json:"FIELD_NAME" tag will be renamed to FIELD_NAME in CUE schema, otherwise the field name will be used
  • Fields with json:"-" tag will be ignored in generation
  • Anonymous fields with json:",inline" tag will be expanded inlined in CUE schema
  • Fields with json:",omitempty" tag will be marked as optional in CUE schema

cue Tag:

  • Format: cue:"key1:value1;key2:value2;boolValue1;boolValue2"
  • Fields with cue:"enum:VALUE1,VALUE2" tag will be set with enum values VALUE1 and VALUE2 in CUE schema
  • Fields with cue:"default:VALUE" tag will be set with default value VALUE in CUE schema, and VALUE must be one of go basic types, including int, float, string, bool
  • Separators ';', ':' and ',' can be escaped with '\', e.g. cue:"default:va\\;lue\\:;enum:e\\;num1,e\\:num2\\,enum3" will be parsed as Default: "va;lue:", Enum: []string{"e;num1", "e:num2,enum3"}}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Generator

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

Generator generates CUE schema from Go struct.

func NewGenerator

func NewGenerator(f string) (*Generator, error)

NewGenerator creates a new generator with given file or package path.

func (*Generator) Generate

func (g *Generator) Generate(w io.Writer) error

Generate generates CUE schema from Go struct and writes to w.

func (*Generator) RegisterAny

func (g *Generator) RegisterAny(types ...string)

RegisterAny registers go types' package+name as any type({...} in CUE)

Example:RegisterAny("*k8s.io/apimachinery/pkg/apis/meta/v1/unstructured.Unstructured")

Default any types are: map[string]interface{}, map[string]any, interface{}, any

Jump to

Keyboard shortcuts

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