syntax = "proto3";

package fetch.aea.Fipa;

message FipaMessage{

    // Custom Types
    message Description{
        bytes description = 1;
    }

    message Query{
        message Nothing {
        }
        oneof query{
            bytes bytes = 1;
            Nothing nothing = 2;
            bytes query_bytes = 3;
        }
    }


    // Performatives and contents
    message Cfp_Performative{
        Query query = 1;
    }

    message Propose_Performative{
        Description proposal = 1;
    }

    message Accept_W_Inform_Performative{
        map<string, string> info = 1;
    }

    message Match_Accept_W_Inform_Performative{
        map<string, string> info = 1;
    }

    message Inform_Performative{
        map<string, string> info = 1;
    }

    message Accept_Performative{}

    message Decline_Performative{}

    message Match_Accept_Performative{}


    // Standard FipaMessage fields
    int32 message_id = 1;
    string dialogue_starter_reference = 2;
    string dialogue_responder_reference = 3;
    int32 target = 4;
    oneof performative{
        Accept_Performative accept = 5;
        Accept_W_Inform_Performative accept_w_inform = 6;
        Cfp_Performative cfp = 7;
        Decline_Performative decline = 8;
        Inform_Performative inform = 9;
        Match_Accept_Performative match_accept = 10;
        Match_Accept_W_Inform_Performative match_accept_w_inform = 11;
        Propose_Performative propose = 12;
    }
}
