use crate::config::{S3Config, S3ConfigOverlay};
use rong::*;
#[derive(Clone, Debug, Default, FromJSObject)]
pub struct S3ClientOptions {
#[js_name = "accessKeyId"]
pub access_key_id: Option<String>,
#[js_name = "secretAccessKey"]
pub secret_access_key: Option<String>,
#[js_name = "sessionToken"]
pub session_token: Option<String>,
pub region: Option<String>,
pub endpoint: Option<String>,
pub bucket: Option<String>,
pub acl: Option<String>,
#[js_name = "virtualHostedStyle"]
pub virtual_hosted_style: Option<bool>,
}
#[derive(Clone, Debug, Default, FromJSObject)]
pub struct S3WriteOptions {
#[js_name = "type"]
pub content_type: Option<String>,
}
#[derive(Clone, Debug, Default, FromJSObject)]
#[ts_skip]
pub(crate) struct S3ClientWriteOptions {
#[js_name = "accessKeyId"]
pub access_key_id: Option<String>,
#[js_name = "secretAccessKey"]
pub secret_access_key: Option<String>,
#[js_name = "sessionToken"]
pub session_token: Option<String>,
pub region: Option<String>,
pub endpoint: Option<String>,
pub bucket: Option<String>,
pub acl: Option<String>,
#[js_name = "virtualHostedStyle"]
pub virtual_hosted_style: Option<bool>,
#[js_name = "type"]
pub content_type: Option<String>,
}
#[derive(Clone, Debug, Default, FromJSObject)]
pub struct S3PresignOptions {
#[js_name = "expiresIn"]
pub expires_in: Option<f64>,
#[ts_type = "\"GET\" | \"PUT\" | \"DELETE\""]
pub method: Option<String>,
}
#[derive(Clone, Debug, Default, FromJSObject)]
#[ts_skip]
pub(crate) struct S3ClientPresignOptions {
#[js_name = "accessKeyId"]
pub access_key_id: Option<String>,
#[js_name = "secretAccessKey"]
pub secret_access_key: Option<String>,
#[js_name = "sessionToken"]
pub session_token: Option<String>,
pub region: Option<String>,
pub endpoint: Option<String>,
pub bucket: Option<String>,
pub acl: Option<String>,
#[js_name = "virtualHostedStyle"]
pub virtual_hosted_style: Option<bool>,
#[js_name = "expiresIn"]
pub expires_in: Option<f64>,
#[ts_type = "\"GET\" | \"PUT\" | \"DELETE\""]
pub method: Option<String>,
}
#[derive(Clone, Debug, Default, FromJSObject)]
pub struct S3ListOptions {
pub prefix: Option<String>,
#[js_name = "maxKeys"]
pub max_keys: Option<f64>,
#[js_name = "startAfter"]
pub start_after: Option<String>,
}
#[derive(Clone, Debug, Default, FromJSObject)]
#[ts_skip]
pub(crate) struct S3ClientListOptions {
#[js_name = "accessKeyId"]
pub access_key_id: Option<String>,
#[js_name = "secretAccessKey"]
pub secret_access_key: Option<String>,
#[js_name = "sessionToken"]
pub session_token: Option<String>,
pub region: Option<String>,
pub endpoint: Option<String>,
pub bucket: Option<String>,
pub acl: Option<String>,
#[js_name = "virtualHostedStyle"]
pub virtual_hosted_style: Option<bool>,
pub prefix: Option<String>,
#[js_name = "maxKeys"]
pub max_keys: Option<f64>,
#[js_name = "startAfter"]
pub start_after: Option<String>,
}
#[derive(Clone, Debug, IntoJSObject)]
pub struct S3StatResult {
pub etag: Option<String>,
#[js_name = "lastModified"]
pub last_modified: Option<String>,
pub size: f64,
#[js_name = "type"]
pub content_type: Option<String>,
}
#[derive(Clone, Debug, IntoJSObject)]
pub struct S3ListEntry {
pub key: String,
pub size: f64,
#[js_name = "lastModified"]
pub last_modified: String,
pub etag: Option<String>,
}
#[derive(Clone, Debug, IntoJSObject)]
pub struct S3ListResult {
pub contents: Vec<S3ListEntry>,
#[js_name = "isTruncated"]
pub is_truncated: bool,
}
macro_rules! impl_s3_overlay {
($ty:ty) => {
impl S3ConfigOverlay for $ty {
fn apply_to_config(&self, config: &mut S3Config) {
if let Some(v) = &self.access_key_id {
config.access_key_id = v.clone();
}
if let Some(v) = &self.secret_access_key {
config.secret_access_key = v.clone();
}
if let Some(v) = &self.session_token {
config.session_token = Some(v.clone());
}
if let Some(v) = &self.region {
config.region = v.clone();
}
if let Some(v) = &self.endpoint {
config.endpoint = Some(v.clone());
}
if let Some(v) = &self.bucket {
config.bucket = v.clone();
}
if let Some(v) = &self.acl {
config.acl = Some(v.clone());
}
if let Some(v) = self.virtual_hosted_style {
config.virtual_hosted_style = v;
}
}
}
};
}
impl_s3_overlay!(S3ClientOptions);
impl_s3_overlay!(S3ClientWriteOptions);
impl_s3_overlay!(S3ClientPresignOptions);
impl_s3_overlay!(S3ClientListOptions);