openapi

package
v0.2.3 Latest Latest
Warning

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

Go to latest
Published: Sep 14, 2026 License: MIT Imports: 12 Imported by: 0

Documentation

Overview

Package openapi builder provides a simple package for building an Open Api Spec document following the version 3.0. This package uses the builder pattern to create each route of an api.

Index

Constants

This section is empty.

Variables

View Source
var (
	Integer string = "integer"
	String  string = "string"
	Boolean string = "boolean"
	Float   string = "number"
	Array   string = "array"
	Object  string = "object"
)

Functions

func FormatRoutePath

func FormatRoutePath(endpoint string) string

func Merge

func Merge[T any](base T, override T) T

func TypeToSwagger

func TypeToSwagger(kind reflect.Kind) string

Types

type Body

type Body struct {
	Description string                     `json:"description"`
	Required    bool                       `json:"required"`
	Content     map[string]MediaTypeObject `json:"content,omitempty"`
	MediaType   string                     `json:"-"`
}

type Builder

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

func NewBuilder

func NewBuilder(title string, description string, version string) *Builder

func (*Builder) Add

func (this *Builder) Add(route *RouteBuilder)

func (*Builder) AddRoute

func (this *Builder) AddRoute(payload RoutePayload) *Builder

func (*Builder) Build

func (this *Builder) Build() *Document

func (Builder) CreateBody

func (this Builder) CreateBody(body any) Body

func (*Builder) CreateParameters

func (this *Builder) CreateParameters(payload RoutePayload) []Parameter

func (Builder) CreateResponse

func (this Builder) CreateResponse(responses map[string]any) map[string]Response

func (*Builder) Route

func (this *Builder) Route(method string, path string, opt ...Options) *RouteBuilder

Route abre um RouteBuilder novo a cada chamada. O resultado só entra no documento depois de passar por Add.

type Document

type Document struct {
	Openapi string `json:"openapi"`

	Info Info `json:"info"`

	Components map[string]OpenapiComponent `json:"components,omitempty"`

	Paths map[string]map[string]Path `json:"paths,omitempty"`
}

func (*Document) Output

func (this *Document) Output(format string) ([]byte, error)

func (*Document) Write

func (this *Document) Write(options ...WriteOptions) error

type Info

type Info struct {
	Title       string `json:"title"`
	Description string `json:"description"`
	Version     string `json:"version"`
}

type Items

type Items struct {
	Type       string            `json:"type,omitempty"`
	Format     string            `json:"format,omitempty"`
	Items      *Items            `json:"items,omitempty"`
	Properties map[string]Schema `json:"properties,omitempty,omitzero"`
	Ref        string            `json:"$ref,omitempty"`
}

func (Items) IsZero added in v0.2.3

func (this Items) IsZero() bool

IsZero é o que o `omitzero` de Schema.Items consulta para não emitir um `items: {}` em schema que não é lista.

type MediaTypeObject

type MediaTypeObject struct {
	Schema Schema `json:"schema,omitempty"`
}

type OpenapiComponent

type OpenapiComponent struct {
}

type Options

type Options struct {
	Summary     string
	Description string
	Required    bool
	Format      string
	MediaType   string
	Tags        []string
}

type Parameter

type Parameter struct {
	Name        string `json:"name"`
	In          string `json:"in"`
	Schema      Schema `json:"schema"`
	Required    bool   `json:"required"`
	Description string `json:"description"`
}

func TypeToParam

func TypeToParam(t reflect.Type) []Parameter

TypeToParam converte cada campo exportado e serializável de um struct em um Parameter. O `In` fica vazio aqui — quem chama é que decide se é path, query ou header.

type Path

type Path struct {
	Summary     string `json:"summary"`
	Description string `json:"description"`

	Tags []string `json:"tags,omitempty"`

	Responses map[string]Response `json:"responses,omitempty"`

	Parameters []Parameter `json:"parameters,omitempty"`

	RequestBody Body `json:"requestBody,omitempty"`
}

type Response

type Response struct {
	Description string `json:"description"`

	// key string is the media type - in this moment only application/json
	Content map[string]MediaTypeObject `json:"content"`
}

type Route

type Route = RoutePayload

type RouteBuilder

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

func NewRouteBuilder

func NewRouteBuilder(path string, method string, options ...Options) *RouteBuilder

func (*RouteBuilder) AddBody

func (this *RouteBuilder) AddBody(payload any, options ...Options) *RouteBuilder

func (*RouteBuilder) AddHeaderParam added in v0.2.0

func (this *RouteBuilder) AddHeaderParam(name string, typename string, options ...Options) *RouteBuilder

func (*RouteBuilder) AddHeaderParams added in v0.2.0

func (this *RouteBuilder) AddHeaderParams(payload any, options ...Options) *RouteBuilder

func (*RouteBuilder) AddPathParam

func (this *RouteBuilder) AddPathParam(name string, typename string, options ...Options) *RouteBuilder

func (*RouteBuilder) AddPathParams

func (this *RouteBuilder) AddPathParams(payload any) *RouteBuilder

func (*RouteBuilder) AddQueryParam

func (this *RouteBuilder) AddQueryParam(name string, typename string, options ...Options) *RouteBuilder

func (*RouteBuilder) AddQueryParams

func (this *RouteBuilder) AddQueryParams(payload any) *RouteBuilder

func (*RouteBuilder) AddResponse

func (this *RouteBuilder) AddResponse(statusCode int, payload any, options ...Options) *RouteBuilder

func (*RouteBuilder) AddTag

func (this *RouteBuilder) AddTag(tag ...string) *RouteBuilder

func (*RouteBuilder) Build

func (this *RouteBuilder) Build() map[string]map[string]Path

type RoutePayload

type RoutePayload struct {
	Method      string   `json:"method"`
	Path        string   `json:"path"`
	Tags        []string `json:"tags"`
	Summary     string   `json:"summary"`
	Description string   `json:"description"`

	Parameter any
	Query     any
	Header    any
	Body      any

	// String is the response status
	// The format of the response will always be application/json
	Responses map[string]any
}

type Schema

type Schema struct {
	Type       string            `json:"type,omitempty"`
	Format     string            `json:"format,omitempty"`
	Items      Items             `json:"items,omitzero,omitempty"`
	Properties map[string]Schema `json:"properties,omitempty"`
	Ref        string            `json:"$ref,omitempty"`
}

func TypeToSchema

func TypeToSchema(t reflect.Type) Schema

TypeToSchema converte um tipo Go no Schema OpenAPI equivalente, recompondo structs, slices, arrays e ponteiros recursivamente.

func (Schema) ToItems

func (this Schema) ToItems() Items

type WriteOptions

type WriteOptions struct {
	Formats    []string
	FolderPath string
	FileName   string
}

Jump to

Keyboard shortcuts

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