pkg/asyncapi/document.go (160 lines of code) (raw):

// Licensed to the Apache Software Foundation (ASF) under one or more // contributor license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright ownership. // The ASF licenses this file to You under the Apache License, Version 2.0 // (the "License"); you may not use this file except in compliance with // the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package asyncapi // Document is an object representing an AsyncAPI document. // NOTE: this interface is not completed yet. type Document interface { Extendable Channels() []Channel HasChannels() bool ApplicationPublishableChannels() []Channel ApplicationPublishableMessages() []Message ApplicationPublishOperations() []Operation ApplicationSubscribableChannels() []Channel ApplicationSubscribableMessages() []Message ApplicationSubscribeOperations() []Operation ClientPublishableChannels() []Channel ClientPublishableMessages() []Message ClientPublishOperations() []Operation ClientSubscribableChannels() []Channel ClientSubscribableMessages() []Message ClientSubscribeOperations() []Operation Messages() []Message Server(name string) (Server, bool) Servers() []Server HasServers() bool Info() Info } type Info interface { Title() string Version() string } // Channel is an addressable component, made available by the server, for the organization of messages. // Producer applications send messages to channels and consumer applications consume messages from channels. type Channel interface { Extendable Identifiable Describable Path() string // Path is the identifier Parameters() []ChannelParameter HasParameters() bool Operations() []Operation Messages() []Message } // ChannelParameter describes a parameter included in a channel name. type ChannelParameter interface { Extendable Identifiable Describable Name() string Schema() Schema } // OperationType is the type of an operation. type OperationType string // Operation describes a publish or a subscribe operation. // This provides a place to document how and why messages are sent and received. type Operation interface { Extendable Describable ID() string IsApplicationPublishing() bool IsApplicationSubscribing() bool IsClientPublishing() bool IsClientSubscribing() bool Messages() []Message Summary() string HasSummary() bool Type() OperationType } // Message describes a message received on a given channel and operation. type Message interface { Extendable Describable UID() string Name() string Title() string HasTitle() bool Summary() string HasSummary() bool ContentType() string Payload() Schema } // FalsifiableSchema is a variadic type used for some Schema fields. // For example, additionalProperties value can be either `false` or a Schema. type FalsifiableSchema interface { IsFalse() bool IsSchema() bool Schema() Schema } // Schema is an object that allows the definition of input and output data types. // These types can be objects, but also primitives and arrays. // This object is a superset of the JSON Schema Specification Draft 07. type Schema interface { Extendable ID() string AdditionalItems() FalsifiableSchema AdditionalProperties() FalsifiableSchema AllOf() []Schema AnyOf() []Schema CircularProps() []string Const() interface{} Contains() Schema ContentEncoding() string ContentMediaType() string Default() interface{} Definitions() map[string]Schema Dependencies() map[string]Schema Deprecated() bool Description() string Discriminator() string Else() Schema Enum() []interface{} Examples() []interface{} ExclusiveMaximum() *float64 ExclusiveMinimum() *float64 Format() string HasCircularProps() bool If() Schema IsCircular() bool Items() []Schema Maximum() *float64 MaxItems() *float64 MaxLength() *float64 MaxProperties() *float64 Minimum() *float64 MinItems() *float64 MinLength() *float64 MinProperties() *float64 MultipleOf() *float64 Not() Schema OneOf() []Schema Pattern() string PatternProperties() map[string]Schema Properties() map[string]Schema Property(name string) Schema PropertyNames() Schema ReadOnly() bool Required() []string Then() Schema Title() string Type() []string UID() string UniqueItems() bool WriteOnly() bool } // Server is an object representing a message broker, a server or any other kind of computer program capable of // sending and/or receiving data. type Server interface { Extendable Identifiable Describable Name() string HasName() bool URL() string HasURL() bool Protocol() string HasProtocol() bool Variables() []ServerVariable } // ServerVariable is an object representing a Server Variable for server URL template substitution. type ServerVariable interface { Extendable Identifiable Name() string HasName() bool DefaultValue() string AllowedValues() []string // Parser API spec says any[], but AsyncAPI mentions is []string } // Extendable means the object can have extensions. // The extensions properties are implemented as patterned fields that are always prefixed by "x-". // See https://www.asyncapi.com/docs/specifications/v2.0.0#specificationExtensions. type Extendable interface { HasExtension(name string) bool Extension(name string) interface{} } // Describable means the object can have a description. type Describable interface { Description() string HasDescription() bool } // Identifiable identifies objects. Some objects can have fields that identify themselves as unique resources. // For example: `id` and `name` fields. type Identifiable interface { IDField() string ID() string }