use remora_domain::{AttemptState, JobLifecycle, JobPhase, OpaqueId}; use serde::{Deserialize, Serialize}; use crate::{ AttemptAuthorityDto, CursorDto, DateTimeDto, HuggingFaceRepositoryTypeDto, HuggingFaceSelectionDto, JobFailureDto, NullableDto, ObjectIdentityDto, PositiveIntegerDto, ProgressDto, ResultDescriptorDto, SafeIntegerDto, TargetDto, }; #[derive(Clone, Deserialize, PartialEq, Serialize)] #[serde(tag = "kind", rename_all = "snake_case")] pub enum SourceProjectionDto { Http(HttpSourceProjectionDto), ObjectStore(ObjectStoreSourceProjectionDto), HuggingFace(HuggingFaceSourceProjectionDto), } #[derive(Clone, Deserialize, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct HttpSourceProjectionDto { pub display_url: String, pub result_path: String, #[serde( default, deserialize_with = "crate::dto::optional_non_null", skip_serializing_if = "Option::is_none" )] pub credential_id: Option, } #[derive(Clone, Deserialize, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct ObjectStoreSourceProjectionDto { pub store: String, pub bucket: String, pub key: String, #[serde( default, deserialize_with = "crate::dto::optional_non_null", skip_serializing_if = "Option::is_none" )] pub version_id: Option, pub result_path: String, #[serde( default, deserialize_with = "crate::dto::optional_non_null", skip_serializing_if = "Option::is_none" )] pub credential_id: Option, } #[derive(Clone, Deserialize, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct HuggingFaceSourceProjectionDto { pub repository_type: HuggingFaceRepositoryTypeDto, pub repository_id: String, pub revision: String, #[serde( default, deserialize_with = "crate::dto::optional_non_null", skip_serializing_if = "Option::is_none" )] pub selection: Option, #[serde( default, deserialize_with = "crate::dto::optional_non_null", skip_serializing_if = "Option::is_none" )] pub credential_id: Option, } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct LeaseProjectionDto { pub expires_at: DateTimeDto, pub renew_after: DateTimeDto, } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct ProgressValueDto { pub completed_bytes: SafeIntegerDto, pub total_bytes: Option, pub completed_members: SafeIntegerDto, pub total_members: Option, } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct CheckpointProjectionDto { pub reusable: bool, pub validated_bytes: SafeIntegerDto, pub validated_members: SafeIntegerDto, } #[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "snake_case")] pub enum DurableDescriptorKindDto { ResolvedSource, Checkpoint, } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct DurableDescriptorRefDto { pub id: OpaqueId, pub kind: DurableDescriptorKindDto, pub schema_version: PositiveIntegerDto, pub byte_length: SafeIntegerDto, #[serde( default, deserialize_with = "crate::dto::optional_non_null", skip_serializing_if = "Option::is_none" )] pub item_count: Option, pub checksum: String, } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct ResultMemberDto { pub id: OpaqueId, pub path: String, pub size: SafeIntegerDto, pub object: ObjectIdentityDto, } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct ResultMemberPageDto { pub items: Vec, pub next_cursor: NullableDto, } #[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "snake_case")] pub enum JobKindDto { Job, } #[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "snake_case")] pub enum TombstoneKindDto { Tombstone, } #[derive(Clone, Deserialize, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct JobDto { pub resource_kind: JobKindDto, pub id: OpaqueId, pub owner: OpaqueId, pub label: NullableDto, pub revision: PositiveIntegerDto, pub phase: JobPhase, pub lifecycle: JobLifecycle, pub source: SourceProjectionDto, pub target: TargetDto, pub authoritative_attempt: NullableDto, pub progress: NullableDto, pub checkpoint: NullableDto, pub result: NullableDto, pub failure: NullableDto, pub created_at: DateTimeDto, pub updated_at: DateTimeDto, pub event_cursor: CursorDto, } #[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] pub enum TerminalJobPhaseDto { Succeeded, Failed, Cancelled, } #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct JobTombstoneDto { pub resource_kind: TombstoneKindDto, pub id: OpaqueId, pub owner: OpaqueId, pub target: TargetDto, pub terminal_phase: TerminalJobPhaseDto, pub deletion_operation_id: OpaqueId, pub created_at: DateTimeDto, pub hard_delete_started_at: DateTimeDto, pub updated_at: DateTimeDto, pub event_cursor: CursorDto, } #[derive(Clone, Deserialize, PartialEq, Serialize)] #[serde(untagged)] pub enum JobResourceDto { Job(Box), Tombstone(Box), } #[derive(Clone, Deserialize, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct JobPageDto { pub items: Vec, pub next_cursor: NullableDto, pub event_cursor: CursorDto, } #[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] pub enum AttemptRecordStateDto { AttemptAuthorized, AttemptExecuting, AttemptStopped, AttemptCommitted, } impl From for AttemptState { fn from(value: AttemptRecordStateDto) -> Self { match value { AttemptRecordStateDto::AttemptAuthorized => Self::AttemptAuthorized, AttemptRecordStateDto::AttemptExecuting => Self::AttemptExecuting, AttemptRecordStateDto::AttemptStopped => Self::AttemptStopped, AttemptRecordStateDto::AttemptCommitted => Self::AttemptCommitted, } } } #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct AttemptRecordDto { pub id: OpaqueId, pub fence: PositiveIntegerDto, pub worker_incarnation: OpaqueId, pub state: AttemptRecordStateDto, pub progress: NullableDto, pub result: NullableDto, pub failure: NullableDto, pub created_at: DateTimeDto, pub updated_at: DateTimeDto, } #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct AttemptPageDto { pub items: Vec, pub next_cursor: NullableDto, } #[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "snake_case")] pub enum DeletionProblemClassDto { Authorization, TargetUnavailable, Configuration, Internal, } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct DeletionProblemDto { pub class: DeletionProblemClassDto, pub message: String, } #[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "snake_case")] pub enum DeletionStateDto { Queued, Running, RetryWait, Blocked, Completed, } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct DeletionOperationDto { pub id: OpaqueId, pub job_id: OpaqueId, pub state: DeletionStateDto, pub problem: NullableDto, pub created_at: DateTimeDto, pub updated_at: DateTimeDto, } #[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "snake_case")] pub enum ApiErrorCodeDto { InvalidRequest, Unauthenticated, Forbidden, NotFound, IdempotencyConflict, PreconditionFailed, CursorInvalid, CursorExpired, RateLimited, Unavailable, Internal, } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct ApiErrorFieldDto { pub pointer: String, pub code: String, } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct ApiErrorDto { pub code: ApiErrorCodeDto, pub message: String, pub request_id: OpaqueId, #[serde( default, deserialize_with = "crate::dto::optional_non_null", skip_serializing_if = "Option::is_none" )] pub fields: Option>, } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct StagingTargetDto { pub store: String, pub bucket: String, pub prefix: String, }