alien_core/bindings/
storage.rs1use super::BindingValue;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
13#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
14#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
15#[serde(rename_all = "camelCase")]
16pub struct S3StorageBinding {
17 pub bucket_name: BindingValue<String>,
19 #[serde(default, skip_serializing_if = "Option::is_none")]
22 pub endpoint: Option<BindingValue<String>>,
23 #[serde(default, skip_serializing_if = "Option::is_none")]
26 pub region: Option<BindingValue<String>>,
27 #[serde(default, skip_serializing_if = "Option::is_none")]
31 pub force_path_style: Option<bool>,
32 #[serde(default, skip_serializing_if = "Option::is_none")]
34 pub access_key_id: Option<BindingValue<String>>,
35 #[serde(default, skip_serializing_if = "Option::is_none")]
37 pub secret_access_key: Option<BindingValue<String>>,
38}
39
40impl S3StorageBinding {
41 pub fn bucket(bucket_name: impl Into<BindingValue<String>>) -> Self {
43 Self {
44 bucket_name: bucket_name.into(),
45 endpoint: None,
46 region: None,
47 force_path_style: None,
48 access_key_id: None,
49 secret_access_key: None,
50 }
51 }
52}
53
54#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
56#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
57#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
58#[serde(rename_all = "camelCase")]
59pub struct BlobStorageBinding {
60 pub account_name: BindingValue<String>,
62 pub container_name: BindingValue<String>,
64}
65
66#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
68#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
69#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
70#[serde(rename_all = "camelCase")]
71pub struct GcsStorageBinding {
72 pub bucket_name: BindingValue<String>,
74}
75
76#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
78#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
79#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
80#[serde(rename_all = "camelCase")]
81pub struct LocalStorageBinding {
82 pub storage_path: BindingValue<String>,
84}
85
86#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
88#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
89#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
90#[serde(tag = "service", rename_all = "lowercase")]
91pub enum StorageBinding {
92 S3(S3StorageBinding),
94 Blob(BlobStorageBinding),
96 Gcs(GcsStorageBinding),
98 #[serde(rename = "local-storage")]
100 Local(LocalStorageBinding),
101}
102
103impl StorageBinding {
104 pub fn s3(bucket_name: impl Into<BindingValue<String>>) -> Self {
106 Self::S3(S3StorageBinding::bucket(bucket_name))
107 }
108
109 pub fn blob(
111 account_name: impl Into<BindingValue<String>>,
112 container_name: impl Into<BindingValue<String>>,
113 ) -> Self {
114 Self::Blob(BlobStorageBinding {
115 account_name: account_name.into(),
116 container_name: container_name.into(),
117 })
118 }
119
120 pub fn gcs(bucket_name: impl Into<BindingValue<String>>) -> Self {
122 Self::Gcs(GcsStorageBinding {
123 bucket_name: bucket_name.into(),
124 })
125 }
126
127 pub fn local(storage_path: impl Into<BindingValue<String>>) -> Self {
129 Self::Local(LocalStorageBinding {
130 storage_path: storage_path.into(),
131 })
132 }
133}