syntax = "proto2";
// https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/struct.proto {
// `Struct` represents a structured data value, consisting of fields
// which map to dynamically typed values. In some languages, `Struct`
// might be supported by a native representation. For example, in
// scripting languages like JS a struct is represented as an
// object. The details of that representation are described together
// with the proto support for the language.
//
// The JSON representation for `Struct` is JSON object.
message Struct {
  // Unordered map of dynamically typed values.
  map<string, Value> fields = 1;
}

// `Value` represents a dynamically typed value which can be either
// null, a number, a string, a boolean, a recursive struct value, or a
// list of values. A producer of value is expected to set one of these
// variants. Absence of any variant indicates an error.
//
// The JSON representation for `Value` is JSON value.
message Value {
  // The kind of value.
  oneof kind {
    // Represents a null value.
    NullValue null_value = 1;
    // Represents a double value.
    double number_value = 2;
    // Represents a string value.
    string string_value = 3;
    // Represents a boolean value.
    bool bool_value = 4;
    // Represents a integer value.
    uint64 varint_value = 5;
    // Represents a repeated `Value`.
    ListValue list_value = 6;
  }
}

// `NullValue` is a singleton enumeration to represent the null value for the
// `Value` type union.
//
//  The JSON representation for `NullValue` is JSON `null`.
enum NullValue {
  // Null value.
  NULL_VALUE = 0;
}

// `ListValue` is a wrapper around a repeated field of values.
//
// The JSON representation for `ListValue` is JSON array.
message ListValue {
  // Repeated field of dynamically typed values.
  repeated Value values = 1;
}
// } https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/struct.proto

message FeatureResponse_Params {
	required string name = 1;
	optional bool value = 2;
	optional Struct values = 3;
}

message FeatureResponse {
	repeated FeatureResponse_Params variants = 1;
}

message FeatureRequest_Params {
	repeated string param = 1;
}

message FeatureRequest {
	repeated FeatureRequest_Params params = 1;
	optional string str_player_id = 2;
	map<string, string> user_attrs = 3;
}
