ir

package
v0.51.0 Latest Latest
Warning

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

Go to latest
Published: Oct 3, 2022 License: Apache-2.0 Imports: 16 Imported by: 2

Documentation

Overview

Package ir contains definitions for the intermediate representation of OpenAPI objects and generated Go types.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func PrintGoValue

func PrintGoValue(v any) string

PrintGoValue prints given value as Go value.

Types

type ContentType

type ContentType string

ContentType is a Content-Type header value.

func (ContentType) Mask added in v0.35.0

func (t ContentType) Mask() bool

func (ContentType) String

func (t ContentType) String() string

type Default

type Default struct {
	Value any
	Set   bool
}

Default represents default value.

func (Default) IsNil

func (d Default) IsNil() bool

IsNil whether value is set, but null.

type Encoding added in v0.44.0

type Encoding string

Encoding of body.

const (
	// EncodingJSON is Encoding for json.
	EncodingJSON Encoding = "application/json"
	// EncodingFormURLEncoded is Encoding for URL-encoded form.
	EncodingFormURLEncoded Encoding = "application/x-www-form-urlencoded"
	// EncodingMultipart is Encoding for multipart form.
	EncodingMultipart Encoding = "multipart/form-data"
	// EncodingOctetStream is Encoding for binary.
	EncodingOctetStream Encoding = "application/octet-stream"
	// EncodingTextPlain is Encoding for text.
	EncodingTextPlain Encoding = "text/plain"
)

func (Encoding) FormURLEncoded added in v0.44.0

func (t Encoding) FormURLEncoded() bool

func (Encoding) JSON added in v0.44.0

func (t Encoding) JSON() bool

func (Encoding) MultipartForm added in v0.44.0

func (t Encoding) MultipartForm() bool

func (Encoding) OctetStream added in v0.44.0

func (t Encoding) OctetStream() bool

func (Encoding) String added in v0.44.0

func (t Encoding) String() string

func (Encoding) TextPlain added in v0.44.0

func (t Encoding) TextPlain() bool

type EnumVariant

type EnumVariant struct {
	Name  string
	Value any
}

func (*EnumVariant) ValueGo

func (v *EnumVariant) ValueGo() string

type Field

type Field struct {
	// Go Name of field.
	Name string
	// Type of field.
	Type *Type
	// JSON tag. May be empty.
	Tag Tag
	// Whether field is inlined map (i.e. additionalProperties, patternProperties).
	Inline InlineField
	// Spec is property schema. May be nil.
	Spec *jsonschema.Property
}

Field of structure.

func (Field) Default

func (f Field) Default() Default

Default returns default value of this field, if it is set.

func (Field) GoDoc

func (f Field) GoDoc() []string

GoDoc returns field godoc.

func (Field) ValidationName

func (f Field) ValidationName() string

ValidationName returns name for FieldError.

type GenericVariant

type GenericVariant struct {
	Nullable bool
	Optional bool
}

func (GenericVariant) Any

func (v GenericVariant) Any() bool

func (GenericVariant) Name

func (v GenericVariant) Name() string

func (GenericVariant) NullableOptional

func (v GenericVariant) NullableOptional() bool

func (GenericVariant) OnlyNullable

func (v GenericVariant) OnlyNullable() bool

func (GenericVariant) OnlyOptional

func (v GenericVariant) OnlyOptional() bool

type InlineField

type InlineField int

InlineField defines how to inline field.

const (
	InlineNone InlineField = iota
	InlineAdditional
	InlinePattern
)

type JSON

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

JSON specifies json encoding and decoding for Type.

func (JSON) AdditionalProps

func (j JSON) AdditionalProps() (field *Field)

AdditionalProps return field of Type that should be encoded as inlined map.

func (JSON) Decode

func (j JSON) Decode() string

func (JSON) Fields

func (j JSON) Fields() (fields JSONFields)

Fields return all fields of Type that should be encoded via json.

func (JSON) Fn

func (j JSON) Fn() string

Fn returns jx.Encoder or jx.Decoder method name.

If blank, value cannot be encoded with single method call.

func (JSON) Format

func (j JSON) Format() string

Format returns format name for handling json encoding or decoding.

Mostly used for encoding or decoding of string formats, like `json.EncodeUUID`, where UUID is Format.

func (JSON) IsBase64

func (j JSON) IsBase64() bool

IsBase64 whether field has base64 encoding.

func (JSON) PatternProps

func (j JSON) PatternProps() (fields []*Field)

PatternProps return field of Type that should be encoded as inlined map with pattern.

func (JSON) Sum

func (j JSON) Sum() SumJSON

Sum returns specification for parsing value as sum type.

func (JSON) SumTypes added in v0.27.0

func (j JSON) SumTypes() string

SumTypes returns jx.Type list for this sum type.

func (JSON) Type

func (j JSON) Type() string

Type returns json value type that can represent Type.

E.g. string primitive can be represented by StringValue which is commonly returned from `i.WhatIsNext()` method. Blank string is returned if there is no appropriate json type.

type JSONFields

type JSONFields []*Field

func (JSONFields) FirstRequiredIndex

func (j JSONFields) FirstRequiredIndex() int

FirstRequiredIndex returns first required field index.

Or -1 if there is no required fields.

func (JSONFields) HasRequired

func (j JSONFields) HasRequired() bool

HasRequired whether object has required fields

func (JSONFields) NotEmpty

func (j JSONFields) NotEmpty() bool

NotEmpty whether field slice is not empty.

func (JSONFields) RequiredMask

func (j JSONFields) RequiredMask() (r []uint8)

RequiredMask returns array of 64-bit bitmasks for required fields.

type Kind

type Kind string
const (
	KindPrimitive Kind = "primitive"
	KindArray     Kind = "array"
	KindMap       Kind = "map"
	KindAlias     Kind = "alias"
	KindEnum      Kind = "enum"
	KindStruct    Kind = "struct"
	KindPointer   Kind = "pointer"
	KindInterface Kind = "interface"
	KindGeneric   Kind = "generic"
	KindSum       Kind = "sum"
	KindAny       Kind = "any"
	KindStream    Kind = "stream"
)

type Media added in v0.42.0

type Media struct {
	// Encoding is the parsed content type used for encoding, but not for header value.
	Encoding Encoding
	// Type is response or request type.
	Type *Type
}

type NilSemantic

type NilSemantic string

NilSemantic specifies nil value semantics.

const (
	NilInvalid  NilSemantic = "invalid"  // nil is invalid
	NilOptional NilSemantic = "optional" // nil is "no value"
	NilNull     NilSemantic = "null"     // nil is null
)

Possible nil value semantics.

func (NilSemantic) Invalid

func (n NilSemantic) Invalid() bool

func (NilSemantic) Null

func (n NilSemantic) Null() bool

func (NilSemantic) Optional

func (n NilSemantic) Optional() bool

type Operation

type Operation struct {
	Name        string
	Summary     string
	Description string
	Deprecated  bool
	PathParts   []*PathPart
	Params      []*Parameter
	Request     *Request
	Responses   *Responses
	Security    []*SecurityRequirement
	Spec        *openapi.Operation
}

func (*Operation) CookieParams

func (op *Operation) CookieParams() []*Parameter

func (Operation) GoDoc

func (op Operation) GoDoc() []string

func (Operation) HasHeaderParams added in v0.33.0

func (op Operation) HasHeaderParams() bool

func (Operation) HasQueryParams

func (op Operation) HasQueryParams() bool

func (*Operation) HeaderParams

func (op *Operation) HeaderParams() []*Parameter

func (*Operation) ListResponseTypes

func (op *Operation) ListResponseTypes() []ResponseInfo

func (Operation) PathParamIndex

func (op Operation) PathParamIndex(name string) int

func (*Operation) PathParams

func (op *Operation) PathParams() []*Parameter

func (Operation) PathParamsCount

func (op Operation) PathParamsCount() (r int)

func (Operation) PrettyOperationID added in v0.37.0

func (op Operation) PrettyOperationID() string

func (*Operation) QueryParams

func (op *Operation) QueryParams() []*Parameter

type Parameter

type Parameter struct {
	Name string
	Type *Type
	Spec *openapi.Parameter
}

func (Parameter) Default

func (op Parameter) Default() Default

Default returns default value of this field, if it is set.

func (Parameter) GoDoc

func (op Parameter) GoDoc() []string

type PathPart

type PathPart struct {
	Raw   string
	Param *Parameter
}

func (PathPart) String

func (p PathPart) String() string

type PrimitiveType

type PrimitiveType int
const (
	None PrimitiveType = iota
	String
	ByteSlice
	Int
	Int8
	Int16
	Int32
	Int64
	Uint
	Uint8
	Uint16
	Uint32
	Uint64
	Float32
	Float64
	Bool
	Null
	Time
	Duration
	UUID
	IP
	URL
	File
)

func (PrimitiveType) IsString

func (p PrimitiveType) IsString() bool

IsString whether this type is string.

func (PrimitiveType) String

func (p PrimitiveType) String() string

type Request

type Request struct {
	Type      *Type
	EmptyBody *Type
	Contents  map[ContentType]Media
	Spec      *openapi.RequestBody
}

type Response

type Response struct {
	NoContent *Type
	Contents  map[ContentType]Media
	Spec      *openapi.Response
	Headers   map[string]*Parameter

	// Indicates that all response types
	// are wrappers with StatusCode field.
	WithStatusCode bool

	// Indicates that all response types
	// are wrappers with response header fields.
	WithHeaders bool
}

func (Response) ResponseInfo added in v0.33.0

func (s Response) ResponseInfo() []ResponseInfo

type ResponseInfo

type ResponseInfo struct {
	Type           *Type
	Encoding       Encoding
	ContentType    ContentType
	StatusCode     int
	NoContent      bool
	WithStatusCode bool
	WithHeaders    bool
	Headers        map[string]*Parameter
}

type Responses added in v0.33.0

type Responses struct {
	Type       *Type
	Pattern    [5]*Response
	StatusCode map[int]*Response
	Default    *Response
}

func (*Responses) HasPattern added in v0.44.0

func (r *Responses) HasPattern() bool

type Security

type Security struct {
	Kind          SecurityKind
	Format        SecurityFormat
	ParameterName string
	Description   string
	Type          *Type
}

func (*Security) GoDoc

func (s *Security) GoDoc() []string

type SecurityFormat

type SecurityFormat string

SecurityFormat defines security parameter format.

const (
	// APIKeySecurityFormat is plain value format.
	APIKeySecurityFormat SecurityFormat = "apiKey"
	// BearerSecurityFormat is Bearer authentication (RFC 6750) format.
	//
	// Unsupported yet.
	BearerSecurityFormat SecurityFormat = "bearer"
	// BasicHTTPSecurityFormat is Basic HTTP authentication (RFC 7617) format.
	BasicHTTPSecurityFormat SecurityFormat = "basic"
	// DigestHTTPSecurityFormat is Digest HTTP authentication (RFC 7616) format.
	//
	// Unsupported yet.
	DigestHTTPSecurityFormat SecurityFormat = "digest"
)

func (SecurityFormat) IsAPIKeySecurity

func (s SecurityFormat) IsAPIKeySecurity() bool

IsAPIKeySecurity whether s is APIKeySecurityFormat.

func (SecurityFormat) IsBasicHTTPSecurity

func (s SecurityFormat) IsBasicHTTPSecurity() bool

IsBasicHTTPSecurity whether s is BasicHTTPSecurityFormat.

func (SecurityFormat) IsBearerSecurity

func (s SecurityFormat) IsBearerSecurity() bool

IsBearerSecurity whether s is BearerSecurityFormat.

func (SecurityFormat) IsDigestHTTPSecurity

func (s SecurityFormat) IsDigestHTTPSecurity() bool

IsDigestHTTPSecurity whether s is DigestHTTPSecurityFormat.

type SecurityKind

type SecurityKind string

SecurityKind defines security kind.

const (
	// QuerySecurity is URL query security parameter. Matches "apiKey" type with "in" = "query".
	QuerySecurity SecurityKind = "query"
	// HeaderSecurity is HTTP header security parameter. Matches some "http" schemes and "apiKey" with "in" = "header".
	HeaderSecurity SecurityKind = "header"
	// OAuth2Security is special type for OAuth2-based authentication. Matches "oauth2" and "openIdConnect".
	OAuth2Security SecurityKind = "oauth2"
)

func (SecurityKind) IsHeader

func (s SecurityKind) IsHeader() bool

IsHeader whether s is HeaderSecurity.

func (SecurityKind) IsOAuth2

func (s SecurityKind) IsOAuth2() bool

IsOAuth2 whether s is OAuth2Security.

func (SecurityKind) IsQuery

func (s SecurityKind) IsQuery() bool

IsQuery whether s is QuerySecurity.

type SecurityRequirement

type SecurityRequirement struct {
	Security *Security
	Spec     openapi.SecurityRequirement
}

type SumJSON

type SumJSON struct {
	Type SumJSONType
}

SumJSON specifies rules for parsing sum types in json.

func (SumJSON) Discriminator

func (s SumJSON) Discriminator() bool

func (SumJSON) Fields

func (s SumJSON) Fields() bool

func (SumJSON) Primitive

func (s SumJSON) Primitive() bool

func (SumJSON) String

func (s SumJSON) String() string

func (SumJSON) TypeDiscriminator

func (s SumJSON) TypeDiscriminator() bool

type SumJSONType

type SumJSONType byte
const (
	SumJSONPrimitive SumJSONType = iota
	SumJSONFields
	SumJSONDiscriminator
	SumJSONTypeDiscriminator
)

type SumSpec

type SumSpec struct {
	Unique []*Field
	// DefaultMapping is name of default mapping.
	//
	// Used for variant which has no unique fields.
	DefaultMapping string

	// Discriminator is field name of sum type discriminator.
	Discriminator string
	// Mapping is discriminator value -> variant mapping.
	Mapping []SumSpecMap

	// TypeDiscriminator denotes to distinguish variants by type.
	TypeDiscriminator bool
}

SumSpec for KindSum.

type SumSpecMap

type SumSpecMap struct {
	Key  string
	Type *Type
}

type Tag

type Tag struct {
	JSON string             // json tag, empty for none
	Form *openapi.Parameter // query form parameter
}

Tag of Field.

func (Tag) EscapedJSON

func (t Tag) EscapedJSON() string

EscapedJSON returns quoted and escaped JSON tag.

type Type

type Type struct {
	Doc                 string              // ogen documentation
	Kind                Kind                // kind
	Name                string              // only for struct, alias, interface, enum
	Primitive           PrimitiveType       // only for primitive, enum
	AliasTo             *Type               // only for alias
	PointerTo           *Type               // only for pointer
	SumOf               []*Type             // only for sum
	SumSpec             SumSpec             // only for sum
	Item                *Type               // only for array, map
	EnumVariants        []*EnumVariant      // only for enum
	Fields              []*Field            // only for struct
	Implements          map[*Type]struct{}  // only for struct, alias, enum
	Implementations     map[*Type]struct{}  // only for interface
	InterfaceMethods    map[string]struct{} // only for interface
	Schema              *jsonschema.Schema  // for all kinds except pointer, interface. Can be nil.
	NilSemantic         NilSemantic         // only for pointer
	GenericOf           *Type               // only for generic
	GenericVariant      GenericVariant      // only for generic
	MapPattern          *regexp.Regexp      // only for map
	DenyAdditionalProps bool                // only for map and struct
	Validators          Validators

	// Features contains a set of features the type must implement.
	// Available features: 'json', 'uri'.
	//
	// If some of these features are set, generator
	// generates additional encoding methods if needed.
	Features []string
}

func Alias

func Alias(name string, to *Type) *Type

func Any

func Any(schema *jsonschema.Schema) *Type

func Array

func Array(item *Type, sem NilSemantic, schema *jsonschema.Schema) *Type

func Generic

func Generic(name string, of *Type, v GenericVariant) *Type

func Interface

func Interface(name string) *Type

func Pointer

func Pointer(to *Type, sem NilSemantic) *Type

func Primitive

func Primitive(typ PrimitiveType, schema *jsonschema.Schema) *Type

func Stream

func Stream(name string) *Type

func (*Type) AddFeature

func (t *Type) AddFeature(feature string)

func (*Type) AddMethod

func (t *Type) AddMethod(name string)

func (Type) CanGeneric

func (t Type) CanGeneric() bool

CanGeneric reports whether Type can be boxed to KindGeneric.

func (*Type) CanHaveMethods

func (t *Type) CanHaveMethods() bool

func (*Type) CloneFeatures

func (t *Type) CloneFeatures() []string

func (Type) Default

func (t Type) Default() Default

Default returns default value of this type, if it is set.

func (Type) DefaultFields

func (t Type) DefaultFields() (r []*Field)

DefaultFields returns fields with default values.

func (*Type) EncodeFn

func (t *Type) EncodeFn() string

func (*Type) Equal

func (t *Type) Equal(target *Type) bool

Equal reports whether two types are equal.

func (*Type) Examples

func (t *Type) Examples() (r []string)

func (Type) FakeFields

func (t Type) FakeFields() (r []*Field)

func (*Type) FakeValue

func (t *Type) FakeValue() string

func (Type) FileParameters added in v0.41.0

func (t Type) FileParameters() (params []Parameter)

func (Type) FormParameters added in v0.41.0

func (t Type) FormParameters() (params []Parameter)

func (*Type) Format

func (t *Type) Format() bool

Format denotes whether custom formatting for Type is required while encoding or decoding.

TODO(ernado): can we use t.JSON here?

func (Type) FromString

func (t Type) FromString() string

func (*Type) Go

func (t *Type) Go() string

Go returns valid Go type for this Type.

func (Type) GoDoc

func (t Type) GoDoc() []string

GoDoc returns type godoc.

func (Type) HasDefaultFields

func (t Type) HasDefaultFields() bool

HasDefaultFields whether type has fields with default values.

func (*Type) HasFeature

func (t *Type) HasFeature(feature string) bool

func (*Type) Implement

func (t *Type) Implement(i *Type)

func (*Type) Is

func (t *Type) Is(vs ...Kind) bool

func (*Type) IsAlias

func (t *Type) IsAlias() bool

func (*Type) IsAny

func (t *Type) IsAny() bool

func (*Type) IsArray

func (t *Type) IsArray() bool

func (*Type) IsEnum

func (t *Type) IsEnum() bool

func (*Type) IsFloat

func (t *Type) IsFloat() bool

func (*Type) IsGeneric

func (t *Type) IsGeneric() bool

func (*Type) IsInteger

func (t *Type) IsInteger() bool

func (*Type) IsInterface

func (t *Type) IsInterface() bool

func (*Type) IsMap

func (t *Type) IsMap() bool

func (*Type) IsNull

func (t *Type) IsNull() bool

func (*Type) IsNumeric

func (t *Type) IsNumeric() bool

func (*Type) IsPointer

func (t *Type) IsPointer() bool

func (*Type) IsPrimitive

func (t *Type) IsPrimitive() bool

func (*Type) IsStream

func (t *Type) IsStream() bool

func (*Type) IsStruct

func (t *Type) IsStruct() bool

func (*Type) IsSum

func (t *Type) IsSum() bool

func (*Type) JSON

func (t *Type) JSON() JSON

JSON returns json encoding/decoding rules for t.

func (*Type) ListImplementations

func (t *Type) ListImplementations() []*Type

func (*Type) Methods

func (t *Type) Methods() []string

func (*Type) MustField

func (t *Type) MustField(name string) *Field

func (*Type) NamePostfix

func (t *Type) NamePostfix() string

NamePostfix returns name postfix for optional wrapper.

func (*Type) NeedValidation

func (t *Type) NeedValidation() bool

func (*Type) Pointer

func (t *Type) Pointer(sem NilSemantic) *Type

func (*Type) ReceiverType

func (t *Type) ReceiverType() string

func (*Type) RecursiveTo

func (t *Type) RecursiveTo(target *Type) bool

func (*Type) SetFieldType

func (t *Type) SetFieldType(name string, newT *Type)

func (Type) String

func (t Type) String() string

func (Type) ToString

func (t Type) ToString() string

func (*Type) Unimplement

func (t *Type) Unimplement(i *Type)

type Validators

type Validators struct {
	String validate.String
	Int    validate.Int
	Float  validate.Float
	Array  validate.Array
	Object validate.Object
}

func (*Validators) SetArray

func (v *Validators) SetArray(schema *jsonschema.Schema)

func (*Validators) SetFloat

func (v *Validators) SetFloat(schema *jsonschema.Schema) error

func (*Validators) SetInt

func (v *Validators) SetInt(schema *jsonschema.Schema) error

func (*Validators) SetObject

func (v *Validators) SetObject(schema *jsonschema.Schema)

func (*Validators) SetString

func (v *Validators) SetString(schema *jsonschema.Schema) (err error)

Jump to

Keyboard shortcuts

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