Documentation
¶
Index ¶
- Constants
- Variables
- func GetPackageComponents(pkg string) []string
- func ValidateOption(lang, option string) bool
- type BaseGenerator
- func (b *BaseGenerator) CreateFile(name, outputDir, suffix string, usePrefix bool) (*os.File, error)
- func (b *BaseGenerator) GenerateBlockComment(comment []string, indent string) string
- func (b *BaseGenerator) GenerateInlineComment(comment []string, indent string) string
- func (b *BaseGenerator) GenerateNewline(file *os.File, count int) error
- func (b *BaseGenerator) GetElem() string
- func (b *BaseGenerator) GetServiceMethodTypes(service *parser.Service) []*parser.Struct
- func (b *BaseGenerator) SetFrugal(f *parser.Frugal)
- type FileType
- type LanguageGenerator
- type LanguageOptions
- type Options
- type ProgramGenerator
Constants ¶
const FilePrefix = "f_"
FilePrefix is the default prefix for generated files.
Variables ¶
var Languages = LanguageOptions{ "go": Options{ "thrift_import": "Override Thrift package import path (default: git.apache.org/thrift.git/lib/go/thrift)", "frugal_import": "Override Frugal package import path (default: github.com/Workiva/frugal/lib/go)", "package_prefix": "Package prefix for generated files", "async": "Generate async client code using channels", "use_vendor": "Use specified import references for vendored includes and do not generate code for them", "slim": "Generate slim type definitions (WARNING: code generated by this may break code consumers, protocol logic should not change)", "suppress_deprecated_logging": "Suppress decrecated API usage warning logging", }, "gopherjs": Options{ "package_prefix": "Package prefix for generated files", "use_vendor": "Use specified import references for vendored includes and do not generate code for them", }, "java": Options{ "generated_annotations": "[use|undated|suppress] " + "use: add @Generated annotations, " + "undated: suppress the date, " + "suppress (default): suppress the annotations", "async": "Generate async client code using futures", "boxed_primitives": "Generate primitives as the boxed equivalents", "use_vendor": "Use specified import references for vendored includes and do not generate code for them", "suppress_deprecated_logging": "Suppress decrecated API usage warning logging", }, "json": Options{ "indent": "Add newlines and indentation", }, "dart": Options{ "library_prefix": "Generate code that can be used within an existing library. " + "Use a dot-separated string, e.g. \"my_parent_lib.src.gen\"", "use_enums": "Generate enums as enums rather than a class with numerical constants", "use_vendor": "Use specified import references for vendored includes and do not generate code for them", }, "py": Options{ "tornado": "Generate code for use with Tornado (compatible with Python 2.7)", "asyncio": "Generate code for use with asyncio (compatible with Python 3.5 or above)", "package_prefix": "Package prefix for generated files", }, "html": Options{ "standalone": "Self-contained mode, includes all CSS in the HTML files. Generates no style.css file, but HTML files will be larger", }, }
Languages is a map of supported language to a map of the generator options it supports.
Functions ¶
func GetPackageComponents ¶
GetPackageComponents returns the package string split on dots.
func ValidateOption ¶
ValidateOption indicates if the language option is supported for the given language.
Types ¶
type BaseGenerator ¶
type BaseGenerator struct {
Options map[string]string
Frugal *parser.Frugal
// contains filtered or unexported fields
}
BaseGenerator contains base generator logic which language generators can extend.
func (*BaseGenerator) CreateFile ¶
func (b *BaseGenerator) CreateFile(name, outputDir, suffix string, usePrefix bool) (*os.File, error)
CreateFile creates a new file using the given configuration.
func (*BaseGenerator) GenerateBlockComment ¶
func (b *BaseGenerator) GenerateBlockComment(comment []string, indent string) string
GenerateBlockComment generates a C-style comment.
func (*BaseGenerator) GenerateInlineComment ¶
func (b *BaseGenerator) GenerateInlineComment(comment []string, indent string) string
GenerateInlineComment generates an inline comment.
func (*BaseGenerator) GenerateNewline ¶
func (b *BaseGenerator) GenerateNewline(file *os.File, count int) error
GenerateNewline adds the specific number of newlines to the given file.
func (*BaseGenerator) GetElem ¶
func (b *BaseGenerator) GetElem() string
func (*BaseGenerator) GetServiceMethodTypes ¶
func (b *BaseGenerator) GetServiceMethodTypes(service *parser.Service) []*parser.Struct
func (*BaseGenerator) SetFrugal ¶
func (b *BaseGenerator) SetFrugal(f *parser.Frugal)
SetFrugal sets the Frugal parse tree for this generator.
type FileType ¶
type FileType string
FileType represents a generated file type.
const ( CombinedServiceFile FileType = "combined_service" CombinedScopeFile FileType = "combined_scope" PublishFile FileType = "publish" SubscribeFile FileType = "subscribe" TypeFile FileType = "types" ServiceArgsResultsFile FileType = "service_args_results" ObjectFile FileType = "object" )
Valid FileTypes.
type LanguageGenerator ¶
type LanguageGenerator interface {
// Generic methods
SetFrugal(*parser.Frugal)
SetupGenerator(outputDir string) error
TeardownGenerator() error
GenerateDependencies(dir string) error
GenerateFile(name, outputDir string, fileType FileType) (*os.File, error)
GenerateDocStringComment(*os.File) error
GenerateConstants(f *os.File, name string) error
GenerateNewline(*os.File, int) error
GetOutputDir(dir string) string
DefaultOutputDir() string
PostProcess(*os.File) error
// Thrift stuff
GenerateConstantsContents([]*parser.Constant) error
GenerateTypeDef(*parser.TypeDef) error
GenerateEnum(*parser.Enum) error
GenerateStruct(*parser.Struct) error
GenerateUnion(*parser.Struct) error
GenerateException(*parser.Struct) error
// Service-specific methods
GenerateServicePackage(*os.File, *parser.Service) error
GenerateServiceImports(*os.File, *parser.Service) error
GenerateService(*os.File, *parser.Service) error
// Scope-specific methods
GenerateScopePackage(*os.File, *parser.Scope) error
GenerateScopeImports(*os.File, *parser.Scope) error
GeneratePublisher(*os.File, *parser.Scope) error
GenerateSubscriber(*os.File, *parser.Scope) error
// UseVendor returns whether this generator instance supports using
// vendored includes
UseVendor() bool
}
LanguageGenerator generates source code as implemented for specific languages.
type LanguageOptions ¶
LanguageOptions contains a map of language to generator options.
type Options ¶
Options contains language generator options. The map key is the option name, and the value is the option description.
type ProgramGenerator ¶
type ProgramGenerator interface {
// Generate the Frugal in the given directory.
Generate(frugal *parser.Frugal, outputDir string) error
// GetOutputDir returns the full output directory for generated code.
GetOutputDir(dir string, f *parser.Frugal) string
// DefaultOutputDir returns the default directory for generated code.
DefaultOutputDir() string
// UseVendor returns whether this generator supports using vendored includes
UseVendor() bool
}
ProgramGenerator generates source code in a specified language for a Frugal produced by the parser.
func NewProgramGenerator ¶
func NewProgramGenerator(generator LanguageGenerator, splitPublisherSubscriber bool) ProgramGenerator
NewProgramGenerator creates a new ProgramGenerator using the given LanguageGenerator.