use std::collections::BTreeMap; use remora_domain::OpaqueId; use serde::{Deserialize, Serialize}; use crate::{DateTimeDto, NullableDto}; #[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "snake_case")] pub enum SourceCredentialKindDto { BasicAuth, BearerToken, HttpHeaders, ObjectStore, HuggingFace, } #[derive(Clone, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct BasicAuthMaterialDto { pub username: String, pub password: String, } #[derive(Clone, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct TokenMaterialDto { pub token: String, } #[derive(Clone, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct HttpHeadersMaterialDto { pub headers: BTreeMap, } #[derive(Clone, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct ObjectStoreCredentialMaterialDto { pub access_key_id: String, pub secret_access_key: String, #[serde( default, deserialize_with = "crate::dto::optional_non_null", skip_serializing_if = "Option::is_none" )] pub session_token: Option, } #[derive(Clone, Deserialize, Eq, PartialEq, Serialize)] #[serde(untagged)] pub enum CredentialMaterialDto { BasicAuth(BasicAuthMaterialDto), Token(TokenMaterialDto), HttpHeaders(HttpHeadersMaterialDto), ObjectStore(ObjectStoreCredentialMaterialDto), } #[derive(Clone, Deserialize, Eq, PartialEq, Serialize)] #[serde(tag = "kind", rename_all = "snake_case")] pub enum SourceCredentialCreateDto { BasicAuth(BasicAuthCredentialCreateDto), BearerToken(BearerTokenCredentialCreateDto), HttpHeaders(HttpHeadersCredentialCreateDto), ObjectStore(ObjectStoreCredentialCreateDto), HuggingFace(HuggingFaceCredentialCreateDto), } #[derive(Clone, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct BasicAuthCredentialCreateDto { pub label: String, pub material: BasicAuthMaterialDto, } #[derive(Clone, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct BearerTokenCredentialCreateDto { pub label: String, pub material: TokenMaterialDto, } #[derive(Clone, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct HttpHeadersCredentialCreateDto { pub label: String, pub material: HttpHeadersMaterialDto, } #[derive(Clone, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct ObjectStoreCredentialCreateDto { pub label: String, pub material: ObjectStoreCredentialMaterialDto, } #[derive(Clone, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct HuggingFaceCredentialCreateDto { pub label: String, pub material: TokenMaterialDto, } #[derive(Clone, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct SourceCredentialRotateDto { pub material: CredentialMaterialDto, } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct SourceCredentialVersionDto { pub id: OpaqueId, pub created_at: DateTimeDto, } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct CredentialGrantVersionDto { pub credential_id: OpaqueId, pub version_id: OpaqueId, } #[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "snake_case")] pub enum SourceCredentialStatusDto { Active, Revoked, } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct SourceCredentialDto { pub id: OpaqueId, pub owner: OpaqueId, pub label: String, pub kind: SourceCredentialKindDto, pub status: SourceCredentialStatusDto, pub active_version: NullableDto, pub created_at: DateTimeDto, pub updated_at: DateTimeDto, } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct SourceCredentialPageDto { pub items: Vec, pub next_cursor: NullableDto, }