syntax = "proto3";

package armonik.api.grpc.v1.sessions;

option csharp_namespace = "ArmoniK.Api.gRPC.V1.Sessions";

/**
 * Represents every available field in a session raw.
 */
enum SessionRawEnumField {
  SESSION_RAW_ENUM_FIELD_UNSPECIFIED = 0;
  SESSION_RAW_ENUM_FIELD_SESSION_ID = 1;
  SESSION_RAW_ENUM_FIELD_STATUS = 2;
  SESSION_RAW_ENUM_FIELD_PARTITION_IDS = 3;
  SESSION_RAW_ENUM_FIELD_OPTIONS = 4;
  SESSION_RAW_ENUM_FIELD_CREATED_AT = 5;
  SESSION_RAW_ENUM_FIELD_CANCELLED_AT = 6;
  SESSION_RAW_ENUM_FIELD_CLOSED_AT = 8;
  SESSION_RAW_ENUM_FIELD_PURGED_AT = 9;
  SESSION_RAW_ENUM_FIELD_DELETED_AT = 10;
  SESSION_RAW_ENUM_FIELD_DURATION = 7;
  SESSION_RAW_ENUM_FIELD_WORKER_SUBMISSION = 11;
  SESSION_RAW_ENUM_FIELD_CLIENT_SUBMISSION = 12;
}

message SessionRawField {
  SessionRawEnumField field = 1;
}

/**
 * Represents a field in a task option.
 */
enum TaskOptionEnumField {
  TASK_OPTION_ENUM_FIELD_UNSPECIFIED = 0;
  TASK_OPTION_ENUM_FIELD_MAX_DURATION = 1;
  TASK_OPTION_ENUM_FIELD_MAX_RETRIES = 2;
  TASK_OPTION_ENUM_FIELD_PRIORITY = 3;
  TASK_OPTION_ENUM_FIELD_PARTITION_ID = 4;
  TASK_OPTION_ENUM_FIELD_APPLICATION_NAME = 5;
  TASK_OPTION_ENUM_FIELD_APPLICATION_VERSION = 6;
  TASK_OPTION_ENUM_FIELD_APPLICATION_NAMESPACE = 7;
  TASK_OPTION_ENUM_FIELD_APPLICATION_SERVICE = 8;
  TASK_OPTION_ENUM_FIELD_ENGINE_TYPE = 9;
}

/**
 * This message is used to wrap the enum in order to facilitate the 'oneOf' generation.
 */
message TaskOptionField {
  TaskOptionEnumField field = 1;
}

/**
 * Represents a generic field in a task option.
 */
message TaskOptionGenericField {
  string field = 1; /** The generic field. */
}

message SessionField {
  oneof field {
    SessionRawField session_raw_field = 1;
    TaskOptionField task_option_field = 2; /** The task option field. */
    TaskOptionGenericField task_option_generic_field = 3; /** The task option generic field. */
  }
}
