syntax = "proto3";

package gatewayprotocol.v1;

import "gatewayprotocol/v1/ad_data_refresh_response.proto";
import "gatewayprotocol/v1/ad_player_config_response.proto";
import "gatewayprotocol/v1/ad_response.proto";
import "gatewayprotocol/v1/error.proto";
import "gatewayprotocol/v1/initialization_response.proto";
import "gatewayprotocol/v1/mutable_data.proto";
import "gatewayprotocol/v1/privacy_update_response.proto";

option swift_prefix = "Gateway";

// The UniversalResponse is the response sent from the server to the client
message UniversalResponse {
  message Payload {
    oneof value {
      // Initialization Response
      InitializationResponse initialization_response = 1;
      // Ad Response
      AdResponse ad_response = 2;
      // Response with placement configuration
      AdPlayerConfigResponse ad_player_config_response = 3;
      // Ad Data Refresh Response
      AdDataRefreshResponse ad_data_refresh_response = 4;
      // Privacy request response
      PrivacyUpdateResponse privacy_update_response = 5;
    }
  }

  // Payload of the response
  Payload payload = 1;

  // Contains mutable data for the client to use for updating its state
  optional MutableData mutable_data = 2;

  // If set, there was an error processing the request as a whole. For
  // individual services, their responses contain their own Error response.
  optional Error error = 3;
}
