desc

package
v0.14.3 Latest Latest
Warning

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

Go to latest
Published: May 15, 2024 License: BSD-3-Clause Imports: 9 Imported by: 11

README

Desc

desc package holds the implementations and definitions of the different descriptors of building blocks of the ronykit framework such as Service, Contract and Stub.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GenerateService added in v0.10.0

func GenerateService(desc ServiceDesc) kit.Service

Types

type Contract

type Contract struct {
	Name           string
	Encoding       kit.Encoding
	Handlers       []kit.HandlerFunc
	Wrappers       []kit.ContractWrapper
	RouteSelectors []RouteSelector
	EdgeSelector   kit.EdgeSelectorFunc
	Modifiers      []kit.ModifierFunc
	InputHeaders   []Header
	Input          kit.Message
	Output         kit.Message
	PossibleErrors []Error
}

Contract is the description of the kit.Contract you are going to create.

func NewContract

func NewContract() *Contract

func (*Contract) AddError

func (c *Contract) AddError(err kit.ErrorMessage) *Contract

AddError sets the possible errors for this Contract. Using this method is OPTIONAL, which mostly could be used by external tools such as Swagger or any other doc generator tools.

func (*Contract) AddHandler

func (c *Contract) AddHandler(h ...kit.HandlerFunc) *Contract

AddHandler add handler for this contract.

func (*Contract) AddModifier

func (c *Contract) AddModifier(m kit.ModifierFunc) *Contract

AddModifier adds a kit.ModifierFunc for this contract. Modifiers are used to modify the outgoing kit.Envelope just before sending to the client.

func (*Contract) AddNamedSelector

func (c *Contract) AddNamedSelector(name string, s kit.RouteSelector) *Contract

AddNamedSelector adds a kit.RouteSelector for this contract, and assigns it a unique name. In case you need to use auto-generated stub.Stub for your service/contract this name will be used in the generated code.

func (*Contract) AddSelector

func (c *Contract) AddSelector(s ...kit.RouteSelector) *Contract

AddSelector adds a kit.RouteSelector for this contract. Selectors are bundle specific.

func (*Contract) AddWrapper

func (c *Contract) AddWrapper(wrappers ...kit.ContractWrapper) *Contract

AddWrapper adds a kit.ContractWrapper for this contract.

func (*Contract) Coordinator added in v0.9.15

func (c *Contract) Coordinator(f kit.EdgeSelectorFunc) *Contract

Coordinator is an alias for SetCoordinator

func (*Contract) In

func (c *Contract) In(m kit.Message) *Contract

In is an alias for SetInput

func (*Contract) NamedSelector

func (c *Contract) NamedSelector(name string, s kit.RouteSelector) *Contract

NamedSelector is an alias for AddNamedSelector

func (*Contract) Out

func (c *Contract) Out(m kit.Message) *Contract

Out is an alias for SetOutput

func (*Contract) Selector

func (c *Contract) Selector(s ...kit.RouteSelector) *Contract

Selector is an alias for AddSelector

func (*Contract) SetCoordinator

func (c *Contract) SetCoordinator(f kit.EdgeSelectorFunc) *Contract

SetCoordinator sets a kit.EdgeSelectorFunc for this contract, to coordinate requests to right kit.EdgeServer instance.

func (*Contract) SetEncoding

func (c *Contract) SetEncoding(enc kit.Encoding) *Contract

SetEncoding sets the supported encoding for this contract.

func (*Contract) SetHandler

func (c *Contract) SetHandler(h ...kit.HandlerFunc) *Contract

SetHandler set the handler by replacing the already existing ones.

func (*Contract) SetInput

func (c *Contract) SetInput(m kit.Message) *Contract

SetInput sets the accepting message for this Contract. Contracts are bound to one input message.

func (*Contract) SetInputHeader added in v0.10.9

func (c *Contract) SetInputHeader(headers ...Header) *Contract

SetInputHeader sets the headers for this Contract. This is an OPTIONAL parameter, which could be used by external tools such as Swagger or any other doc generator tools.

func (*Contract) SetName

func (c *Contract) SetName(name string) *Contract

SetName sets the name of the Contract c, it MUST be unique per Service. However, it has no operation effect only is helpful with some other tools such as monitoring, logging or tracing tools to identity it.

func (*Contract) SetOutput

func (c *Contract) SetOutput(m kit.Message) *Contract

SetOutput sets the outgoing message for this Contract. This is an OPTIONAL parameter, which mostly could be used by external tools such as Swagger or any other doc generator tools.

type ContractType added in v0.10.0

type ContractType string
const (
	REST ContractType = "REST"
	RPC  ContractType = "RPC"
)

type DTO

type DTO struct {
	// Comments could be used by generators to print some useful information about this DTO
	Comments []string
	// Name is the name of this DTO struct
	Name   string
	Type   string
	RType  reflect.Type
	IsErr  bool
	Fields []DTOField
}

DTO represents the description of Data Transfer Object of the Stub

func (DTO) CodeField

func (dto DTO) CodeField() string

func (DTO) ItemField

func (dto DTO) ItemField() string

type DTOField

type DTOField struct {
	// Name of this field
	Name string
	// RType is the reflected type of this field for handling more complex cases
	RType reflect.Type
	// Type of this field and if this type is slice or map then it might have one or two
	// subtypes
	Type     string
	SubType1 string
	SubType2 string
	// If this field was an embedded field means fields are coming from an embedded DTO
	// If Embedded is TRUE then for sure IsDTO must be TRUE
	Embedded bool
	IsDTO    bool
	IsPtr    bool
	Tags     []DTOFieldTag
}

DTOField represents description of a field of the DTO

func (DTOField) GetTag added in v0.12.1

func (x DTOField) GetTag(name string) string

type DTOFieldTag

type DTOFieldTag struct {
	Name  string
	Value string
}

DTOFieldTag represents description of a tag of the DTOField

type Error

type Error struct {
	Code    int
	Item    string
	Message kit.Message
}

type ErrorDTO

type ErrorDTO struct {
	Code int
	Item string
	DTO  DTO
}

ErrorDTO represents description of a Data Object Transfer which is used to show an error case.

type Header struct {
	Name     string
	Required bool
}

func OptionalHeader added in v0.10.9

func OptionalHeader(name string) Header

func RequiredHeader added in v0.10.9

func RequiredHeader(name string) Header

type Kind added in v0.10.6

type Kind string
const (
	None    Kind = ""
	Bool    Kind = "boolean"
	String  Kind = "string"
	Integer Kind = "integer"
	Float   Kind = "float"
	Byte    Kind = "byte"
	Object  Kind = "object"
	Map     Kind = "map"
	Array   Kind = "array"
)

type ParsedContract added in v0.10.0

type ParsedContract struct {
	Index     int
	GroupName string
	Name      string
	Encoding  string

	Type       ContractType
	Path       string
	PathParams []string
	Method     string
	Predicate  string

	Request   ParsedRequest
	Responses []ParsedResponse
}

func (ParsedContract) IsPathParam added in v0.10.5

func (pc ParsedContract) IsPathParam(name string) bool

func (ParsedContract) OKResponse added in v0.10.5

func (pc ParsedContract) OKResponse() ParsedResponse

func (ParsedContract) SuggestName added in v0.10.1

func (pc ParsedContract) SuggestName() string

type ParsedElement added in v0.10.6

type ParsedElement struct {
	Kind    Kind
	Element *ParsedElement
	Message *ParsedMessage
}

func (ParsedElement) String added in v0.10.6

func (pf ParsedElement) String() string

type ParsedField added in v0.10.6

type ParsedField struct {
	GoName      string
	Name        string
	Tag         ParsedStructTag
	SampleValue string
	Optional    bool
	Type        string
	Kind        Kind
	Embedded    bool

	// Kind == Object
	// Message is the parsed message if the kind is Object.
	Message *ParsedMessage
	// Kind == Array || Kind == Map
	Element *ParsedElement
}

type ParsedMessage added in v0.10.0

type ParsedMessage struct {
	Name   string
	Kind   Kind
	Fields []ParsedField
}

func (ParsedMessage) FieldByGoName added in v0.11.38

func (pm ParsedMessage) FieldByGoName(name string) *ParsedField

func (ParsedMessage) FieldByName added in v0.11.38

func (pm ParsedMessage) FieldByName(name string) *ParsedField

func (ParsedMessage) JSON added in v0.10.0

func (pm ParsedMessage) JSON() string

func (ParsedMessage) String added in v0.10.6

func (pm ParsedMessage) String() string

type ParsedRequest added in v0.10.0

type ParsedRequest struct {
	Headers []Header
	Message ParsedMessage
}

type ParsedResponse added in v0.10.0

type ParsedResponse struct {
	Message ParsedMessage
	ErrCode int
	ErrItem string
}

func (ParsedResponse) IsError added in v0.10.0

func (pr ParsedResponse) IsError() bool

type ParsedService added in v0.10.0

type ParsedService struct {
	// Origin is the original service descriptor untouched by the parser
	Origin *Service
	// Contracts is the list of parsed contracts. The relation between ParsedContract
	// and Contract is not 1:1 because a Contract can have multiple RouteSelectors.
	// Each RouteSelector will be parsed into a ParsedContract.
	Contracts []ParsedContract
	// contains filtered or unexported fields
}

func Parse added in v0.10.0

func Parse(desc ServiceDesc) ParsedService

Parse extracts the Service descriptor from the input ServiceDesc Refer to ParseService for more details.

func ParseService added in v0.10.0

func ParseService(svc *Service) ParsedService

ParseService extracts information from a Service descriptor using reflection. It returns a ParsedService. The ParsedService is useful to generate custom code based on the service descriptor. In the contrib package this is used to generate the swagger spec and postman collections.

func (*ParsedService) Messages added in v0.10.5

func (ps *ParsedService) Messages() []ParsedMessage

type ParsedStructTag added in v0.10.1

type ParsedStructTag struct {
	Name           string
	Optional       bool
	PossibleValues []string
	Deprecated     bool
}

type RESTMethod

type RESTMethod struct {
	Name           string
	Method         string
	Path           string
	Encoding       string
	Request        DTO
	Response       DTO
	PossibleErrors []ErrorDTO
}

RESTMethod represents description of a Contract with kit.RESTRouteSelector.

type RPCMethod

type RPCMethod struct {
	Name           string
	Predicate      string
	Request        DTO
	Response       DTO
	PossibleErrors []ErrorDTO
	Encoding       string
	kit.IncomingRPCContainer
	kit.OutgoingRPCContainer
}

RPCMethod represents description of a Contract with kit.RPCRouteSelector

type RouteSelector

type RouteSelector struct {
	Name     string
	Selector kit.RouteSelector
}

type Service

type Service struct {
	Name           string
	Version        string
	Description    string
	Encoding       kit.Encoding
	PossibleErrors []Error
	Wrappers       []kit.ServiceWrapper
	Contracts      []Contract
	Handlers       []kit.HandlerFunc
	// contains filtered or unexported fields
}

Service is the description of the kit.Service you are going to create. It then generates a kit.Service by calling Generate method.

func NewService

func NewService(name string) *Service

func (*Service) AddContract

func (s *Service) AddContract(contracts ...*Contract) *Service

AddContract adds a contract to the service.

func (*Service) AddError

func (s *Service) AddError(err kit.ErrorMessage) *Service

AddError sets the possible errors for all the Contracts of this Service. Using this method is OPTIONAL, which mostly could be used by external tools such as Swagger or any other doc generator tools. NOTE: The auto-generated stub also use these errors to identifies if the response should be considered

as error or successful.

func (*Service) AddHandler

func (s *Service) AddHandler(h ...kit.HandlerFunc) *Service

AddHandler adds handlers to run before and/or after the contract's handlers

func (*Service) AddWrapper

func (s *Service) AddWrapper(wrappers ...kit.ServiceWrapper) *Service

AddWrapper adds service wrappers to the Service description.

func (*Service) Generate

func (s *Service) Generate() kit.Service

Generate generates the kit.Service

func (*Service) SetDescription

func (s *Service) SetDescription(d string) *Service

func (*Service) SetEncoding

func (s *Service) SetEncoding(enc kit.Encoding) *Service

func (*Service) SetVersion

func (s *Service) SetVersion(v string) *Service

func (*Service) Stub

func (s *Service) Stub(tags ...string) (*Stub, error)

Stub returns the Stub, which describes the stub specification and could be used to auto-generate stub for this service.

type ServiceDesc

type ServiceDesc interface {
	Desc() *Service
}

type ServiceDescFunc

type ServiceDescFunc func() *Service

func (ServiceDescFunc) Desc

func (f ServiceDescFunc) Desc() *Service

type Stub

type Stub struct {
	DTOs  map[string]DTO
	RESTs []RESTMethod
	RPCs  []RPCMethod
	// contains filtered or unexported fields
}

Stub represents description of a stub of the service described by Service descriptor.

func MergeStubs added in v0.10.19

func MergeStubs(stubs ...*Stub) *Stub

func (Stub) Tags

func (d Stub) Tags() []string

Jump to

Keyboard shortcuts

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