syntax = "proto3";

package fetch.aea.Gym;

message GymMessage{

    // Custom Types
    message AnyObject{
        bytes any = 1;
    }


    // Performatives and contents
    message Act_Performative{
        AnyObject action = 1;
        int32 step_id = 2;
    }

    message Percept_Performative{
        int32 step_id = 1;
        AnyObject observation = 2;
        float reward = 3;
        bool done = 4;
        AnyObject info = 5;
    }

    message Status_Performative{
        map<string, string> content = 1;
    }

    message Reset_Performative{}

    message Close_Performative{}


    // Standard GymMessage fields
    int32 message_id = 1;
    string dialogue_starter_reference = 2;
    string dialogue_responder_reference = 3;
    int32 target = 4;
    oneof performative{
        Act_Performative act = 5;
        Close_Performative close = 6;
        Percept_Performative percept = 7;
        Reset_Performative reset = 8;
        Status_Performative status = 9;
    }
}
