plugin

package
v0.1.3 Latest Latest
Warning

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

Go to latest
Published: Aug 26, 2021 License: Apache-2.0 Imports: 9 Imported by: 27

Documentation

Overview

Package plugin defines the interface for implementing thriftgo plugins.

A plugin is a stand-alone executable that reads input from standard input and writes out generated contents to the standard output while logging any warning messages to the standard error.

When the plugin is executed by thriftgo, the input stream will be a Request object defined in the protocol.thrift serialized with the binary protocol. The plugin is expected to write a Response object to the standard output, serialized with the binary protocol, too. The plugin can use the exit status to indicate whether it finishes its jobs successfully.

The response of a plugin may contains one or more `Generated` contents. Each content can either be a single file -- when its `Name` is set and `InsertionPoint` is not set, or a code segment to be inserted into a file which the `Name` field specifies.

An **insertion point** is a position in a file that a code segment will be inserted before. Sequential segments being inserted to a same point will keep their order. The representation of an insertion point in a file is a string with a special format:

"@@thriftgo_insertion_point(NAME)"

Where NAME is the name of the insertion point that the `InsertionPoint` of a `Generated` could use.

There will be some **pre-defined** insertion points for each backend language. Check the code templates of that language to find out their names.

All insertion points in the file will be erased before thriftgo finally writes out files.

Refer to protocol.thrift for more information.

Index

Constants

View Source
const InsertionPointFormat = "@@thriftgo_insertion_point(%s)"

InsertionPointFormat is the format for insertion points.

Variables

View Source
var Generated_InsertionPoint_DEFAULT string
View Source
var Generated_Name_DEFAULT string
View Source
var MaxExecutionTime = time.Minute

MaxExecutionTime is a timeout for executing external plugins.

View Source
var Request_AST_DEFAULT *parser.Thrift
View Source
var Response_Contents_DEFAULT []*Generated
View Source
var Response_Error_DEFAULT string
View Source
var Response_Warnings_DEFAULT []string

Functions

func InsertionPoint

func InsertionPoint(names ...string) string

InsertionPoint returns a new insertion point.

func Marshal

func Marshal(data Writer) ([]byte, error)

Marshal serializes the data with binary protocol.

func MarshalRequest

func MarshalRequest(data *Request) ([]byte, error)

MarshalRequest encodes a request with binary protocol.

func MarshalResponse

func MarshalResponse(data *Response) ([]byte, error)

MarshalResponse encodes a response with binary protocol.

func Pack

func Pack(opts []Option) (ss []string)

Pack packs Option into strings.

func Unmarshal

func Unmarshal(data Reader, bs []byte) error

Unmarshal deserializes the data from bytes with binary protocol.

Types

type Desc

type Desc struct {
	Name    string
	Options []Option
}

Desc can be used to describes the interface of a plugin or a generator backend.

func ParseCompactArguments

func ParseCompactArguments(str string) (*Desc, error)

ParseCompactArguments parses a compact form option into arguments. A compact form option is like:

name:key1=val1,key2,key3=val3

This function barely checks the validity of the string, so the user should always provide a valid input.

type Generated

type Generated struct {
	Content        string  `thrift:"Content,1,required" json:"Content"`
	Name           *string `thrift:"Name,2" json:"Name,omitempty"`
	InsertionPoint *string `thrift:"InsertionPoint,3" json:"InsertionPoint,omitempty"`
}

func NewGenerated

func NewGenerated() *Generated

func (*Generated) GetContent

func (p *Generated) GetContent() string

func (*Generated) GetInsertionPoint

func (p *Generated) GetInsertionPoint() string

func (*Generated) GetName

func (p *Generated) GetName() string

func (*Generated) IsSetInsertionPoint

func (p *Generated) IsSetInsertionPoint() bool

func (*Generated) IsSetName

func (p *Generated) IsSetName() bool

func (*Generated) Read

func (p *Generated) Read(iprot thrift.TProtocol) (err error)

func (*Generated) ReadField1

func (p *Generated) ReadField1(iprot thrift.TProtocol) error

func (*Generated) ReadField2

func (p *Generated) ReadField2(iprot thrift.TProtocol) error

func (*Generated) ReadField3

func (p *Generated) ReadField3(iprot thrift.TProtocol) error

func (*Generated) String

func (p *Generated) String() string

func (*Generated) Write

func (p *Generated) Write(oprot thrift.TProtocol) (err error)

type Option

type Option struct {
	Name string
	Desc string
}

Option is used to describes an option for a plugin or a generator backend.

type Plugin

type Plugin interface {
	// Name returns the name of the plugin.
	Name() string

	// Execute invokes the plugin and waits for response.
	Execute(req *Request) (res *Response)
}

Plugin takes a request and builds a response to generate codes.

func Lookup

func Lookup(arg string) (Plugin, error)

Lookup searches for PATH to find a plugin that match the description.

type Reader

type Reader interface {
	Read(iprot thrift.TProtocol) error
}

Reader reads data from an input thrift.TProtocol.

type Request

type Request struct {
	Version             string         `thrift:"Version,1,required" json:"Version"`
	GeneratorParameters []string       `thrift:"GeneratorParameters,2,required" json:"GeneratorParameters"`
	PluginParameters    []string       `thrift:"PluginParameters,3,required" json:"PluginParameters"`
	Language            string         `thrift:"Language,4,required" json:"Language"`
	OutputPath          string         `thrift:"OutputPath,5,required" json:"OutputPath"`
	Recursive           bool           `thrift:"Recursive,6,required" json:"Recursive"`
	AST                 *parser.Thrift `thrift:"AST,7,required" json:"AST"`
}

func NewRequest

func NewRequest() *Request

func UnmarshalRequest

func UnmarshalRequest(bs []byte) (*Request, error)

UnmarshalRequest decodes a request with binary protocol.

func (*Request) GetAST

func (p *Request) GetAST() *parser.Thrift

func (*Request) GetGeneratorParameters

func (p *Request) GetGeneratorParameters() []string

func (*Request) GetLanguage

func (p *Request) GetLanguage() string

func (*Request) GetOutputPath

func (p *Request) GetOutputPath() string

func (*Request) GetPluginParameters

func (p *Request) GetPluginParameters() []string

func (*Request) GetRecursive

func (p *Request) GetRecursive() bool

func (*Request) GetVersion

func (p *Request) GetVersion() string

func (*Request) IsSetAST

func (p *Request) IsSetAST() bool

func (*Request) Read

func (p *Request) Read(iprot thrift.TProtocol) (err error)

func (*Request) ReadField1

func (p *Request) ReadField1(iprot thrift.TProtocol) error

func (*Request) ReadField2

func (p *Request) ReadField2(iprot thrift.TProtocol) error

func (*Request) ReadField3

func (p *Request) ReadField3(iprot thrift.TProtocol) error

func (*Request) ReadField4

func (p *Request) ReadField4(iprot thrift.TProtocol) error

func (*Request) ReadField5

func (p *Request) ReadField5(iprot thrift.TProtocol) error

func (*Request) ReadField6

func (p *Request) ReadField6(iprot thrift.TProtocol) error

func (*Request) ReadField7

func (p *Request) ReadField7(iprot thrift.TProtocol) error

func (*Request) String

func (p *Request) String() string

func (*Request) Write

func (p *Request) Write(oprot thrift.TProtocol) (err error)

type Response

type Response struct {
	Error    *string      `thrift:"Error,1" json:"Error,omitempty"`
	Contents []*Generated `thrift:"Contents,2" json:"Contents,omitempty"`
	Warnings []string     `thrift:"Warnings,3" json:"Warnings,omitempty"`
}

func BuildErrorResponse

func BuildErrorResponse(errMsg string, warnings ...string) *Response

BuildErrorResponse creates a plugin response with a error message.

func NewResponse

func NewResponse() *Response

func UnmarshalResponse

func UnmarshalResponse(bs []byte) (*Response, error)

UnmarshalResponse decodes a response with binary protocol.

func (*Response) GetContents

func (p *Response) GetContents() []*Generated

func (*Response) GetError

func (p *Response) GetError() string

func (*Response) GetWarnings

func (p *Response) GetWarnings() []string

func (*Response) IsSetContents

func (p *Response) IsSetContents() bool

func (*Response) IsSetError

func (p *Response) IsSetError() bool

func (*Response) IsSetWarnings

func (p *Response) IsSetWarnings() bool

func (*Response) Read

func (p *Response) Read(iprot thrift.TProtocol) (err error)

func (*Response) ReadField1

func (p *Response) ReadField1(iprot thrift.TProtocol) error

func (*Response) ReadField2

func (p *Response) ReadField2(iprot thrift.TProtocol) error

func (*Response) ReadField3

func (p *Response) ReadField3(iprot thrift.TProtocol) error

func (*Response) String

func (p *Response) String() string

func (*Response) Write

func (p *Response) Write(oprot thrift.TProtocol) (err error)

type Writer

type Writer interface {
	Write(oprot thrift.TProtocol) error
}

Writer writes out data to an output thrift.TProtocol.

Jump to

Keyboard shortcuts

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