Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 19 additions & 19 deletions pkg/asyncapi/schema.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,26 @@ package asyncapi
// Validations is a representation of the JSON-Object validation fields supported by asyncapi
// These fields are in common for v2 and v3.
type Validations[T any] struct {
Required []string `json:"required"`
MultipleOf []string `json:"multipleOf"`
Maximum float64 `json:"maximum"`
ExclusiveMaximum float64 `json:"exclusiveMaximum"`
Minimum float64 `json:"minimum"`
ExclusiveMinimum float64 `json:"exclusiveMinimum"`
MaxLength uint `json:"maxLength"`
MinLength uint `json:"minLength"`
Pattern string `json:"pattern"`
MaxItems uint `json:"maxItems"`
MinItems uint `json:"minItems"`
UniqueItems bool `json:"uniqueItems"`
MaxProperties uint `json:"maxProperties"`
MinProperties uint `json:"minProperties"`
Enum []any `json:"enum"`
Const any `json:"const"`
Required []string `json:"required,omitempty"`
MultipleOf []string `json:"multipleOf,omitempty"`
Maximum float64 `json:"maximum,omitempty"`
ExclusiveMaximum float64 `json:"exclusiveMaximum,omitempty"`
Minimum float64 `json:"minimum,omitempty"`
ExclusiveMinimum float64 `json:"exclusiveMinimum,omitempty"`
MaxLength uint `json:"maxLength,omitempty"`
MinLength uint `json:"minLength,omitempty"`
Pattern string `json:"pattern,omitempty"`
MaxItems uint `json:"maxItems,omitempty"`
MinItems uint `json:"minItems,omitempty"`
UniqueItems bool `json:"uniqueItems,omitempty"`
MaxProperties uint `json:"maxProperties,omitempty"`
MinProperties uint `json:"minProperties,omitempty"`
Enum []any `json:"enum,omitempty"`
Const any `json:"const,omitempty"`

AllOf []*T `json:"allOf"`
AnyOf []*T `json:"anyOf"`
OneOf []*T `json:"oneOf"`
AllOf []*T `json:"allOf,omitempty"`
AnyOf []*T `json:"anyOf,omitempty"`
OneOf []*T `json:"oneOf,omitempty"`

// --- Non JSON Schema/AsyncAPI fields -------------------------------------
IsRequired bool `json:"-"`
Expand Down
24 changes: 13 additions & 11 deletions pkg/asyncapi/v3/channel.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,19 @@ var (
type Channel struct {
// --- AsyncAPI fields -----------------------------------------------------

Address string `json:"address"`
Messages map[string]*Message `json:"messages"`
Title string `json:"title"`
Summary string `json:"summary"`
Description string `json:"description"`
Servers []*Server `json:"servers"` // Reference only
Parameters map[string]*Parameter `json:"parameters"`
Tags []*Tag `json:"tags"`
ExternalDocs *ExternalDocumentation `json:"externalDocs"`
Bindings *ChannelBindings `json:"bindings"`
Reference string `json:"$ref"`
// NOTE: the JSON null literal is a valid value for address, which cannot be parsed as a Go string
// Solutions are to change to a *string (a breaking change) or use a wrapper type like sql.NullString
Address string `json:"address,omitempty"`
Messages map[string]*Message `json:"messages,omitempty"`
Title string `json:"title,omitempty"`
Summary string `json:"summary,omitempty"`
Description string `json:"description,omitempty"`
Servers []*Server `json:"servers,omitempty"` // Reference only
Parameters map[string]*Parameter `json:"parameters,omitempty"`
Tags []*Tag `json:"tags,omitempty"`
ExternalDocs *ExternalDocumentation `json:"externalDocs,omitempty"`
Bindings *ChannelBindings `json:"bindings,omitempty"`
Reference string `json:"$ref,omitempty"`

// --- Non AsyncAPI fields -------------------------------------------------

Expand Down
40 changes: 20 additions & 20 deletions pkg/asyncapi/v3/channel_bindings.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,26 @@ package asyncapiv3
type ChannelBindings struct {
// --- AsyncAPI fields -----------------------------------------------------

HTTP HTTPBinding `json:"http"`
WS WsBinding `json:"ws"`
Kafka KafkaBinding `json:"kafka"`
AnyPointMQ AnyPointMqBinding `json:"anypointmq"`
AMQP AMQPBinding `json:"amqp"`
AMQP1 AMQP1Binding `json:"amqp1"`
MQTT MQTTBinding `json:"mqtt"`
MQTT5 MQTT5Binding `json:"mqtt5"`
NATS NATSBinding `json:"nats"`
JMS JMSBinding `json:"jms"`
SNS SNSBinding `json:"sns"`
Solace SolaceBinding `json:"solace"`
SQS SQSBinding `json:"sqs"`
Stomp StompBinding `json:"stomp"`
Redis RedisBinding `json:"redis"`
Mercure MercureBinding `json:"mercure"`
IBMMQ IBMMQBinding `json:"ibmmq"`
GooglePubSub GooglePubSubBinding `json:"googlepubsub"`
Pulsar PulsarBinding `json:"pulsar"`
Reference string `json:"$ref"`
HTTP HTTPBinding `json:"http,omitzero"`
WS WsBinding `json:"ws,omitzero"`
Kafka KafkaBinding `json:"kafka,omitzero"`
AnyPointMQ AnyPointMqBinding `json:"anypointmq,omitzero"`
AMQP AMQPBinding `json:"amqp,omitzero"`
AMQP1 AMQP1Binding `json:"amqp1,omitzero"`
MQTT MQTTBinding `json:"mqtt,omitzero"`
MQTT5 MQTT5Binding `json:"mqtt5,omitzero"`
NATS NATSBinding `json:"nats,omitzero"`
JMS JMSBinding `json:"jms,omitzero"`
SNS SNSBinding `json:"sns,omitzero"`
Solace SolaceBinding `json:"solace,omitzero"`
SQS SQSBinding `json:"sqs,omitzero"`
Stomp StompBinding `json:"stomp,omitzero"`
Redis RedisBinding `json:"redis,omitzero"`
Mercure MercureBinding `json:"mercure,omitzero"`
IBMMQ IBMMQBinding `json:"ibmmq,omitzero"`
GooglePubSub GooglePubSubBinding `json:"googlepubsub,omitzero"`
Pulsar PulsarBinding `json:"pulsar,omitzero"`
Reference string `json:"$ref,omitempty"`

// --- Non AsyncAPI fields -------------------------------------------------

Expand Down
38 changes: 19 additions & 19 deletions pkg/asyncapi/v3/components.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,25 @@ package asyncapiv3
type Components struct {
// --- AsyncAPI fields -----------------------------------------------------

Schemas map[string]*Schema `json:"schemas"`
Servers map[string]*Server `json:"servers"`
Channels map[string]*Channel `json:"channels"`
Operations map[string]*Operation `json:"operations"`
Messages map[string]*Message `json:"messages"`
SecuritySchemes map[string]*SecurityScheme `json:"securitySchemes"`
ServerVariables map[string]*ServerVariable `json:"serverVariables"`
Parameters map[string]*Parameter `json:"parameters"`
CorrelationIDs map[string]*CorrelationID `json:"correlationIds"`
Replies map[string]*OperationReply `json:"replies"`
ReplyAddresses map[string]*OperationReplyAddress `json:"replyAddresses"`
ExternalDocs map[string]*ExternalDocumentation `json:"externalDocs"`
Tags map[string]*Tag `json:"tags"`
OperationTraits map[string]*OperationTrait `json:"operationTraits"`
MessageTraits map[string]*MessageTrait `json:"messageTraits"`
ServerBindings map[string]*ServerBindings `json:"serverBindings"`
ChannelBindings map[string]*ChannelBindings `json:"channelBindings"`
OperationBindings map[string]*OperationBindings `json:"operationBindings"`
MessageBindings map[string]*MessageBindings `json:"messageBindings"`
Schemas map[string]*Schema `json:"schemas,omitempty"`
Servers map[string]*Server `json:"servers,omitempty"`
Channels map[string]*Channel `json:"channels,omitempty"`
Operations map[string]*Operation `json:"operations,omitempty"`
Messages map[string]*Message `json:"messages,omitempty"`
SecuritySchemes map[string]*SecurityScheme `json:"securitySchemes,omitempty"`
ServerVariables map[string]*ServerVariable `json:"serverVariables,omitempty"`
Parameters map[string]*Parameter `json:"parameters,omitempty"`
CorrelationIDs map[string]*CorrelationID `json:"correlationIds,omitempty"`
Replies map[string]*OperationReply `json:"replies,omitempty"`
ReplyAddresses map[string]*OperationReplyAddress `json:"replyAddresses,omitempty"`
ExternalDocs map[string]*ExternalDocumentation `json:"externalDocs,omitempty"`
Tags map[string]*Tag `json:"tags,omitempty"`
OperationTraits map[string]*OperationTrait `json:"operationTraits,omitempty"`
MessageTraits map[string]*MessageTrait `json:"messageTraits,omitempty"`
ServerBindings map[string]*ServerBindings `json:"serverBindings,omitempty"`
ChannelBindings map[string]*ChannelBindings `json:"channelBindings,omitempty"`
OperationBindings map[string]*OperationBindings `json:"operationBindings,omitempty"`
MessageBindings map[string]*MessageBindings `json:"messageBindings,omitempty"`

// --- Non AsyncAPI fields -------------------------------------------------
}
Expand Down
6 changes: 3 additions & 3 deletions pkg/asyncapi/v3/contact.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ package asyncapiv3
type Contact struct {
// --- AsyncAPI fields -----------------------------------------------------

Name string `json:"name"`
URL string `json:"url"`
Email string `json:"email"`
Name string `json:"name,omitempty"`
URL string `json:"url,omitempty"`
Email string `json:"email,omitempty"`

// --- Non AsyncAPI fields -------------------------------------------------
}
6 changes: 3 additions & 3 deletions pkg/asyncapi/v3/correlation_id.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ package asyncapiv3
type CorrelationID struct {
// --- AsyncAPI fields -----------------------------------------------------

Description string `json:"description"`
Location string `json:"location"`
Reference string `json:"$ref"`
Description string `json:"description,omitempty"`
Location string `json:"location,omitempty"`
Reference string `json:"$ref,omitempty"`

// --- Non AsyncAPI fields -------------------------------------------------

Expand Down
6 changes: 3 additions & 3 deletions pkg/asyncapi/v3/extensions.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ import (
// that are out of the AsyncAPI spec.
type Extensions struct {
// Setting custom Go type when generating schemas
ExtGoType string `json:"x-go-type"`
ExtGoType string `json:"x-go-type,omitempty"`

// Setting custom import statements for ExtGoType
ExtGoTypeImport *GoTypeImportExtension `json:"x-go-type-import"`
ExtGoTypeImport *GoTypeImportExtension `json:"x-go-type-import,omitempty"`

// Controls whether to include omitempty in JSON tags
// If false, omitempty will be removed from JSON tags even if the field can be null
ExtOmitEmpty *bool `json:"x-omitempty"`
ExtOmitEmpty *bool `json:"x-omitempty,omitempty"`
}

// GoTypeImportExtension specifies the required import statement
Expand Down
4 changes: 2 additions & 2 deletions pkg/asyncapi/v3/external_documentation.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ const (
type ExternalDocumentation struct {
// --- AsyncAPI fields -----------------------------------------------------

Description string `json:"description"`
Description string `json:"description,omitempty"`
URL string `json:"url"`
Reference string `json:"$ref"`
Reference string `json:"$ref,omitempty"`

// --- Non AsyncAPI fields -------------------------------------------------

Expand Down
12 changes: 6 additions & 6 deletions pkg/asyncapi/v3/info.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ type Info struct {

Title string `json:"title"`
Version string `json:"version"`
Description string `json:"description"`
TermsOfService string `json:"termsOfService"`
Contact *Contact `json:"contact"`
License *License `json:"license"`
Tags []*Tag `json:"tags"`
ExternalDocs *ExternalDocumentation `json:"externalDocs"`
Description string `json:"description,omitempty"`
TermsOfService string `json:"termsOfService,omitempty"`
Contact *Contact `json:"contact,omitempty"`
License *License `json:"license,omitempty"`
Tags []*Tag `json:"tags,omitempty"`
ExternalDocs *ExternalDocumentation `json:"externalDocs,omitempty"`

// --- Non AsyncAPI fields -------------------------------------------------
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/asyncapi/v3/license.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ type License struct {
// --- AsyncAPI fields -----------------------------------------------------

Name string `json:"name"`
URL string `json:"url"`
URL string `json:"url,omitempty"`

// --- Non AsyncAPI fields -------------------------------------------------
}
30 changes: 15 additions & 15 deletions pkg/asyncapi/v3/message.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,21 +37,21 @@ const (
type Message struct {
// --- AsyncAPI fields -----------------------------------------------------

Headers *Schema `json:"headers"`
Payload *Schema `json:"payload"`
OneOf []*Message `json:"oneOf"`
CorrelationID *CorrelationID `json:"correlationID"`
ContentType string `json:"contentType"`
Name string `json:"name"`
Title string `json:"title"`
Summary string `json:"summary"`
Description string `json:"description"`
Tags []*Tag `json:"tags"`
ExternalDocs *ExternalDocumentation `json:"externalDocs"`
Bindings *MessageBindings `json:"bindings"`
Examples []*MessageExample `json:"examples"`
Traits []*MessageTrait `json:"traits"`
Reference string `json:"$ref"`
Headers *Schema `json:"headers,omitempty"`
Payload *Schema `json:"payload,omitempty"`
OneOf []*Message `json:"oneOf,omitempty"`
CorrelationID *CorrelationID `json:"correlationID,omitempty"`
ContentType string `json:"contentType,omitempty"`
Name string `json:"name,omitempty"`
Title string `json:"title,omitempty"`
Summary string `json:"summary,omitempty"`
Description string `json:"description,omitempty"`
Tags []*Tag `json:"tags,omitempty"`
ExternalDocs *ExternalDocumentation `json:"externalDocs,omitempty"`
Bindings *MessageBindings `json:"bindings,omitempty"`
Examples []*MessageExample `json:"examples,omitempty"`
Traits []*MessageTrait `json:"traits,omitempty"`
Reference string `json:"$ref,omitempty"`

// --- Non AsyncAPI fields -------------------------------------------------

Expand Down
40 changes: 20 additions & 20 deletions pkg/asyncapi/v3/message_bindings.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,26 @@ package asyncapiv3
type MessageBindings struct {
// --- AsyncAPI fields -----------------------------------------------------

HTTP HTTPBinding `json:"http"`
WS WsBinding `json:"ws"`
Kafka KafkaBinding `json:"kafka"`
AnyPointMQ AnyPointMqBinding `json:"anypointmq"`
AMQP AMQPBinding `json:"amqp"`
AMQP1 AMQP1Binding `json:"amqp1"`
MQTT MQTTBinding `json:"mqtt"`
MQTT5 MQTT5Binding `json:"mqtt5"`
NATS NATSBinding `json:"nats"`
JMS JMSBinding `json:"jms"`
SNS SNSBinding `json:"sns"`
Solace SolaceBinding `json:"solace"`
SQS SQSBinding `json:"sqs"`
Stomp StompBinding `json:"stomp"`
Redis RedisBinding `json:"redis"`
Mercure MercureBinding `json:"mercure"`
IBMMQ IBMMQBinding `json:"ibmmq"`
GooglePubSub GooglePubSubBinding `json:"googlepubsub"`
Pulsar PulsarBinding `json:"pulsar"`
Reference string `json:"$ref"`
HTTP HTTPBinding `json:"http,omitzero"`
WS WsBinding `json:"ws,omitzero"`
Kafka KafkaBinding `json:"kafka,omitzero"`
AnyPointMQ AnyPointMqBinding `json:"anypointmq,omitzero"`
AMQP AMQPBinding `json:"amqp,omitzero"`
AMQP1 AMQP1Binding `json:"amqp1,omitzero"`
MQTT MQTTBinding `json:"mqtt,omitzero"`
MQTT5 MQTT5Binding `json:"mqtt5,omitzero"`
NATS NATSBinding `json:"nats,omitzero"`
JMS JMSBinding `json:"jms,omitzero"`
SNS SNSBinding `json:"sns,omitzero"`
Solace SolaceBinding `json:"solace,omitzero"`
SQS SQSBinding `json:"sqs,omitzero"`
Stomp StompBinding `json:"stomp,omitzero"`
Redis RedisBinding `json:"redis,omitzero"`
Mercure MercureBinding `json:"mercure,omitzero"`
IBMMQ IBMMQBinding `json:"ibmmq,omitzero"`
GooglePubSub GooglePubSubBinding `json:"googlepubsub,omitzero"`
Pulsar PulsarBinding `json:"pulsar,omitzero"`
Reference string `json:"$ref,omitempty"`

// --- Non AsyncAPI fields -------------------------------------------------

Expand Down
10 changes: 5 additions & 5 deletions pkg/asyncapi/v3/message_example.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ package asyncapiv3
type MessageExample struct {
// --- AsyncAPI fields -----------------------------------------------------

Headers map[string]any `json:"headers"`
Payload map[string]any `json:"payload"`
Name string `json:"name"`
Summary string `json:"summary"`
Reference string `json:"$ref"`
Headers map[string]any `json:"headers,omitempty"`
Payload map[string]any `json:"payload,omitempty"`
Name string `json:"name,omitempty"`
Summary string `json:"summary,omitempty"`
Reference string `json:"$ref,omitempty"`

// --- Non AsyncAPI fields -------------------------------------------------

Expand Down
27 changes: 14 additions & 13 deletions pkg/asyncapi/v3/message_trait.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,20 @@ package asyncapiv3
type MessageTrait struct {
// --- AsyncAPI fields -----------------------------------------------------

Headers *Schema `json:"headers"`
Payload *Schema `json:"payload"`
CorrelationID *CorrelationID `json:"correlationID"`
ContentType string `json:"contentType"`
Name string `json:"name"`
Title string `json:"title"`
Summary string `json:"summary"`
Description string `json:"description"`
Tags []*Tag `json:"tags"`
ExternalDocs *ExternalDocumentation `json:"externalDocs"`
Bindings *MessageBindings `json:"bindings"`
Examples []*MessageExample `json:"examples"`
Reference string `json:"$ref"`
Headers *Schema `json:"headers,omitempty"`
// NOTE: "payload" is explicitly disallowed: https://github.com/asyncapi/spec/blob/c5888f52b70f8eb99f782df9d23a88e1a4dce112/spec/asyncapi.md?plain=1#L1414
Payload *Schema `json:"payload,omitempty"`
CorrelationID *CorrelationID `json:"correlationID,omitempty"`
ContentType string `json:"contentType,omitempty"`
Name string `json:"name,omitempty"`
Title string `json:"title,omitempty"`
Summary string `json:"summary,omitempty"`
Description string `json:"description,omitempty"`
Tags []*Tag `json:"tags,omitempty"`
ExternalDocs *ExternalDocumentation `json:"externalDocs,omitempty"`
Bindings *MessageBindings `json:"bindings,omitempty"`
Examples []*MessageExample `json:"examples,omitempty"`
Reference string `json:"$ref,omitempty"`

// --- Non AsyncAPI fields -------------------------------------------------

Expand Down
Loading