use super::BindingValue;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
#[serde(rename_all = "camelCase")]
pub struct S3StorageBinding {
pub bucket_name: BindingValue<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
#[serde(rename_all = "camelCase")]
pub struct BlobStorageBinding {
pub account_name: BindingValue<String>,
pub container_name: BindingValue<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
#[serde(rename_all = "camelCase")]
pub struct GcsStorageBinding {
pub bucket_name: BindingValue<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
#[serde(rename_all = "camelCase")]
pub struct LocalStorageBinding {
pub storage_path: BindingValue<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
#[serde(tag = "service", rename_all = "lowercase")]
pub enum StorageBinding {
S3(S3StorageBinding),
Blob(BlobStorageBinding),
Gcs(GcsStorageBinding),
#[serde(rename = "local-storage")]
Local(LocalStorageBinding),
}
impl StorageBinding {
pub fn s3(bucket_name: impl Into<BindingValue<String>>) -> Self {
Self::S3(S3StorageBinding {
bucket_name: bucket_name.into(),
})
}
pub fn blob(
account_name: impl Into<BindingValue<String>>,
container_name: impl Into<BindingValue<String>>,
) -> Self {
Self::Blob(BlobStorageBinding {
account_name: account_name.into(),
container_name: container_name.into(),
})
}
pub fn gcs(bucket_name: impl Into<BindingValue<String>>) -> Self {
Self::Gcs(GcsStorageBinding {
bucket_name: bucket_name.into(),
})
}
pub fn local(storage_path: impl Into<BindingValue<String>>) -> Self {
Self::Local(LocalStorageBinding {
storage_path: storage_path.into(),
})
}
}