Documentation
¶
Overview ¶
Package kit provides a code generator to generate endpoints and http handlers for an interface. For the code generator to work, the following requirements should be met:
- Interface methods do not contain function types, channel types or anonymous structs as parameter or return values.
- The source file that contains the interface should not import any types that are used in the interface definition using ".", i.e. (import them without a prefix/qualifier).
- Every interface method has a context.Context as the first parameter.
- Every interface method has 1 or 2 return values, where the last one is always "error".
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type EndpointSpecification ¶
type EndpointSpecification struct {
// name of this endpoint, defaults to the name of the method
Name string `json:"name"`
// specifies how the http handler for this endpoint is generated
HttpSpec HttpSpec `json:"http"`
}
Specification to create a single endpoint for an inteface method.
type EndpointSpecifications ¶
type EndpointSpecifications struct {
// the interface method to generate endpoints for
Method parse.Method
EndpointSpecs []EndpointSpecification `json:"endpoints"`
// How the values from the interface method are obtained from an http request,
// only used if http handlers are generated.
// Since we expect the first parameter of an interface method to be a "context.Context", the length of this slice
// should equal len(Method.Params) - 1.
// TODO we could let every endpoint for this method define their own http params, which would result in multiple http decode funcs, but this is not necessary for now.
HttpParams []HttpParamType `json:"httpParams"`
}
Defines the endpoints created for a single interface method. We can generate multiple endpoints for the same interface method, e.g. to use different permission/authentication middlewares or different http urls.
func (EndpointSpecifications) IsValid ¶
func (e EndpointSpecifications) IsValid() error
type HttpParamType ¶
type HttpParamType string
HttpParamType represents how the parameters of an interface method should be obtained from a http request. E.g. by parsing the request body as json or extracting the parameter from the url path or query parameters.
const HttpTypeJson HttpParamType = "json"
const HttpTypeQuery HttpParamType = "query"
const HttpTypeUrl HttpParamType = "url"
type HttpSpec ¶
type HttpSpec struct {
// url
Path string `json:"path"`
// http method, e.g. "GET", "POST", ...
Method string `json:"method"`
// http code for the response on success
SuccessCode int `json:"successCode"`
}
Defines how a http handler is generated for an endpoint.
type KitGenSpecification ¶
type KitGenSpecification struct {
//the interface for which code should be generated
Interface parse.Interface
//go module the interface belongs to
Module parse.Module
// if false, nothing will be generated
GenerateEndpoints bool
// if false, will not generate http handlers for endpoints
GenerateHttp bool
// package name used for generated endpoints
// can be a full package path or relative to the module name
// If empty will not generate endpoints.
EndpointPackage string `json:"endpointPackage"`
// full path of the package that will contain the generated endpoint code
// we need this to later import this package to e.g. generate http handlers
EndpointPackageFullPath string
// output file for endpoint code
EndpointOutput string `json:"endpointOutput"`
// Package name used for generated http handlers.
// If empty will not generate anything.
HttpPackage string `json:"httpPackage"`
HttpPackageFullPath string
// output file for http code
HttpOutput string `json:"httpOutput"`
// each element specifies the endpoints to generate for an interface method
Endpoints []EndpointSpecifications
}
KitGenSpecification defines what the code generator should generate. It is typically constructed by reading source code annotations on e.g. an interface or method and configuration from the command line or a configuration file.
func SpecFromAnnotations ¶
func SpecFromAnnotations(i parse.Interface, m parse.Module, a annotations.InterfaceAnnotation) (KitGenSpecification, error)
func (KitGenSpecification) ContainsDuplicateEndpointName ¶
func (spec KitGenSpecification) ContainsDuplicateEndpointName() error
func (KitGenSpecification) IsValid ¶
func (spec KitGenSpecification) IsValid() error
Checks if a given specification is valid. A specification is not valid if one of the following conditions is not satisfied:
- there cannot be two endpoints with the same name
- any interface method (for which at least one endpoint is defined) must have a context.Context value as first parameter
- any interface method (for which at least one endpoint is defined) must have at most two return values and last return value must be of type error
- if http code is generated, endpoints should have http method, path and success code set
type KitGenerator ¶
type KitGenerator struct {
Spec KitGenSpecification
// contains filtered or unexported fields
}
func NewKitGenerator ¶
func NewKitGenerator(spec KitGenSpecification) *KitGenerator