
@startuml

class OperationBase {
        StringType operationId 
        StringType summary 
        StringType description 
        Message message 
        AmqpBinding amqpBinding 
        AmqpSubscriberImplementation amqpSubscriberImplementation 
        XResponseType responseType 
}


class Message {
        XParameter[] xParameters 
        Type payload 
        XTokenContent xToken 
}

note top: Container that describes the messages\nare sent

class AmqpBinding {
        StringType exchangeName 
        AmqpBindingExchangeTypeEnum exchangeType 
        StringType    yTo 
}

note top: specific AMQP binding properties

class AmqpSubscriberImplementation {
        AmqpQueue queue 
}

note top: AMQP specific subscriber settings

class XResponseType {
        StringType description 
        BooleanType isArray 
        IntegerType arrayMinItems 
        IntegerType arrayMaxItems 
        BooleanType arrayUniqueItems 
        Type type 
}

note top: type that is responded in\nRPC style communication

class AsyncApiType {
}

note top: Base type to identify AsyncApi\ntypes

AsyncApiType --|> Type
class AsyncApiInfoType {
        StringType title 
        StringType version 
        StringType description 
}

note top: Subset of the info object\nattribs: https://www.asyncapi.com/docs/specifications/v2.0.0#infoObject

AsyncApiInfoType --|> AsyncApiType
class AsyncApiServerType {
        StringType name 
        StringType url 
        StringType description 
        StringType protocol 
        StringType protocolVersion 
}

note top: one entry of the servers\nsection

AsyncApiServerType --|> AsyncApiType
class AsyncApiChannelType {
        StringType key 
        StringType description 
        Parameter[] parameters 
        PublishDescription publish 
        SubscribeDescription subscribe 
}

note top: one entry of the channels\nsection

AsyncApiChannelType --|> AsyncApiType
class Parameter {
        StringType name 
        StringType description 
        Type type 
}

note top: Parameters contained in the channel\nkey

class PublishDescription {
        Type responseType 
}

note top: Configuration parameter needed for publishing

PublishDescription --|> OperationBase
class SubscribeDescription {
}

note top: Configuration parameter needed to subscribe\ndata

SubscribeDescription --|> OperationBase
class XParameter {
        StringType name 
        StringType description 
        Type type 
}

note top: models the custom parameters

class XTokenContent {
        StringType name 
        StringType description 
        Type type 
}

note top: claim that is expected as\npart of a attached JWT\ntoken

enum AmqpBindingExchangeTypeEnum {
    TOPIC
    FAN
    DIRECT
    HEADER
}


class AmqpQueue {
        StringType name 
        AmqpQueueTypeEnum type 
        BooleanType durable 
        BooleanType exclusive 
        BooleanType maxLength 
        IntegerType msgTtl 
}

note top: AMQP specific queue settings

enum AmqpQueueTypeEnum {
    QUORUM
    CLASSIC
}



    
OperationBase  *--  Message        
            
OperationBase  *--  AmqpBinding        
            
OperationBase  *--  AmqpSubscriberImplementation        
            
OperationBase  *--  XResponseType        
            
    
Message "0" *-- "n" XParameter        
            
Message  *--  Type        
            
Message  *--  XTokenContent        
            
    
AmqpBinding  *--  AmqpBindingExchangeTypeEnum        
            
    
AmqpSubscriberImplementation  *--  AmqpQueue        
            
    
XResponseType  *--  Type        
            
    
    
    
    
AsyncApiChannelType "0" *-- "n" Parameter        
            
AsyncApiChannelType  *--  PublishDescription        
            
AsyncApiChannelType  *--  SubscribeDescription        
            
    
Parameter  *--  Type        
            
    
PublishDescription  *--  Type        
            
    
    
XParameter  *--  Type        
            
    
XTokenContent  *--  Type        
            
    
    
AmqpQueue  *--  AmqpQueueTypeEnum        
            
    

footer \ngenerated with yacg (https://github.com/OkieOth/yacg),\n(template: plantUml.mako v1.1.0)\npowered by plantuml (https://plantuml.com/)
@enduml