init bucketmeta struct

This commit is contained in:
weisd
2024-09-27 22:00:45 +08:00
parent b4a95d20e2
commit cbaea166c4
31 changed files with 275 additions and 235 deletions
-69
View File
@@ -1,69 +0,0 @@
use serde::{Deserialize, Serialize};
use super::name::Name;
// 定义common结构体
#[derive(Serialize, Deserialize, Debug)]
struct Common {
pub id: String,
pub filter: S3Key,
pub events: Vec<Name>,
}
// 定义Queue结构体
#[derive(Serialize, Deserialize, Debug)]
struct Queue {
pub common: Common,
pub arn: ARN,
}
// 定义ARN结构体
#[derive(Serialize, Deserialize, Debug)]
pub struct ARN {
pub target_id: TargetID,
pub region: String,
}
// 定义TargetID结构体
#[derive(Serialize, Deserialize, Debug)]
pub struct TargetID {
pub id: String,
pub name: String,
}
// 定义FilterRule结构体
#[derive(Serialize, Deserialize, Debug)]
pub struct FilterRule {
pub name: String,
pub value: String,
}
// 定义FilterRuleList结构体
#[derive(Serialize, Deserialize, Debug)]
pub struct FilterRuleList {
pub rules: Vec<FilterRule>,
}
// 定义S3Key结构体
#[derive(Serialize, Deserialize, Debug)]
pub struct S3Key {
pub rule_list: FilterRuleList,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Lambda {
arn: String,
}
// 定义Topic结构体
#[derive(Serialize, Deserialize, Debug)]
pub struct Topic {
arn: String,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Config {
queue_list: Vec<Queue>,
lambda_list: Vec<Lambda>,
topic_list: Vec<Topic>,
}
+70 -1
View File
@@ -1,2 +1,71 @@
pub(crate) mod config;
mod name; mod name;
use serde::{Deserialize, Serialize};
use name::Name;
// 定义common结构体
#[derive(Serialize, Deserialize, Debug)]
struct Common {
pub id: String,
pub filter: S3Key,
pub events: Vec<Name>,
}
// 定义Queue结构体
#[derive(Serialize, Deserialize, Debug)]
struct Queue {
pub common: Common,
pub arn: ARN,
}
// 定义ARN结构体
#[derive(Serialize, Deserialize, Debug)]
pub struct ARN {
pub target_id: TargetID,
pub region: String,
}
// 定义TargetID结构体
#[derive(Serialize, Deserialize, Debug)]
pub struct TargetID {
pub id: String,
pub name: String,
}
// 定义FilterRule结构体
#[derive(Serialize, Deserialize, Debug)]
pub struct FilterRule {
pub name: String,
pub value: String,
}
// 定义FilterRuleList结构体
#[derive(Serialize, Deserialize, Debug)]
pub struct FilterRuleList {
pub rules: Vec<FilterRule>,
}
// 定义S3Key结构体
#[derive(Serialize, Deserialize, Debug)]
pub struct S3Key {
pub rule_list: FilterRuleList,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Lambda {
arn: String,
}
// 定义Topic结构体
#[derive(Serialize, Deserialize, Debug)]
pub struct Topic {
arn: String,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Config {
queue_list: Vec<Queue>,
lambda_list: Vec<Lambda>,
topic_list: Vec<Topic>,
}
+2 -2
View File
@@ -1,6 +1,6 @@
use super::{prefix::Prefix, tag::Tag}; use super::{prefix::Prefix, tag::Tag};
use serde::{Deserialize, Serialize};
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct And { pub struct And {
pub object_size_greater_than: i64, pub object_size_greater_than: i64,
pub object_size_less_than: i64, pub object_size_less_than: i64,
+3 -1
View File
@@ -1,4 +1,6 @@
#[derive(Debug)] use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize, Default)]
pub struct DelMarkerExpiration { pub struct DelMarkerExpiration {
pub days: usize, pub days: usize,
} }
+6 -6
View File
@@ -1,23 +1,23 @@
use serde::{Deserialize, Serialize};
use time::OffsetDateTime; use time::OffsetDateTime;
// ExpirationDays is a type alias to unmarshal Days in Expiration // ExpirationDays is a type alias to unmarshal Days in Expiration
pub type ExpirationDays = usize; pub type ExpirationDays = usize;
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct ExpirationDate(OffsetDateTime); pub struct ExpirationDate(Option<OffsetDateTime>);
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct ExpireDeleteMarker { pub struct ExpireDeleteMarker {
pub marker: Boolean, pub marker: Boolean,
} }
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct Boolean { pub struct Boolean {
pub val: bool, pub val: bool,
pub set: bool, pub set: bool,
} }
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct Expiration { pub struct Expiration {
pub days: Option<ExpirationDays>, pub days: Option<ExpirationDays>,
pub date: Option<ExpirationDate>, pub date: Option<ExpirationDate>,
+6 -3
View File
@@ -1,6 +1,9 @@
use super::{and::And, prefix::Prefix, tag::Tag}; use std::collections::HashMap;
#[derive(Debug)] use super::{and::And, prefix::Prefix, tag::Tag};
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize, Default)]
pub struct Filter { pub struct Filter {
pub set: bool, pub set: bool,
@@ -16,5 +19,5 @@ pub struct Filter {
pub tag_set: bool, pub tag_set: bool,
// 使用HashMap存储缓存的标签 // 使用HashMap存储缓存的标签
pub cached_tags: std::collections::HashMap<String, String>, pub cached_tags: HashMap<String, String>,
} }
+3 -3
View File
@@ -1,8 +1,8 @@
use super::rule::Rule;
use serde::{Deserialize, Serialize};
use time::OffsetDateTime; use time::OffsetDateTime;
use super::rule::Rule; #[derive(Debug, Deserialize, Serialize, Default)]
#[derive(Debug)]
pub struct Lifecycle { pub struct Lifecycle {
pub rules: Vec<Rule>, pub rules: Vec<Rule>,
pub expiry_updated_at: Option<OffsetDateTime>, pub expiry_updated_at: Option<OffsetDateTime>,
@@ -1,13 +1,14 @@
use super::{expiration::ExpirationDays, transition::TransitionDays}; use super::{expiration::ExpirationDays, transition::TransitionDays};
use serde::{Deserialize, Serialize};
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct NoncurrentVersionExpiration { pub struct NoncurrentVersionExpiration {
pub noncurrent_days: ExpirationDays, pub noncurrent_days: ExpirationDays,
pub newer_noncurrent_versions: usize, pub newer_noncurrent_versions: usize,
set: bool, set: bool,
} }
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct NoncurrentVersionTransition { pub struct NoncurrentVersionTransition {
pub noncurrent_days: TransitionDays, pub noncurrent_days: TransitionDays,
pub storage_class: String, pub storage_class: String,
+3 -1
View File
@@ -1,4 +1,6 @@
#[derive(Debug)] use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize, Default)]
pub struct Prefix { pub struct Prefix {
pub val: String, pub val: String,
pub set: bool, pub set: bool,
+4 -2
View File
@@ -6,14 +6,16 @@ use super::{
prefix::Prefix, prefix::Prefix,
transition::Transition, transition::Transition,
}; };
use serde::{Deserialize, Serialize};
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub enum Status { pub enum Status {
#[default]
Enabled, Enabled,
Disabled, Disabled,
} }
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct Rule { pub struct Rule {
pub id: String, pub id: String,
pub status: Status, pub status: Status,
+3 -1
View File
@@ -1,4 +1,6 @@
#[derive(Debug)] use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize, Default)]
pub struct Tag { pub struct Tag {
pub key: String, pub key: String,
pub value: String, pub value: String,
+4 -3
View File
@@ -1,11 +1,12 @@
use serde::{Deserialize, Serialize};
use time::OffsetDateTime; use time::OffsetDateTime;
pub type TransitionDays = usize; pub type TransitionDays = usize;
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct TransitionDate(OffsetDateTime); pub struct TransitionDate(Option<OffsetDateTime>);
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct Transition { pub struct Transition {
pub days: Option<TransitionDays>, pub days: Option<TransitionDays>,
pub date: Option<TransitionDate>, pub date: Option<TransitionDate>,
+52 -16
View File
@@ -1,11 +1,23 @@
use std::collections::HashMap;
use rmp_serde::Serializer;
use serde::{Deserialize, Serialize};
use time::OffsetDateTime; use time::OffsetDateTime;
use super::{ use super::{
encryption::BucketSSEConfig, event, lifecycle::lifecycle::Lifecycle, objectlock, policy::bucket_policy::BucketPolicy, encryption::BucketSSEConfig, event, lifecycle::lifecycle::Lifecycle, objectlock, policy::bucket_policy::BucketPolicy,
quota::BucketQuota, replication, tags::Tags, versioning::Versioning, quota::BucketQuota, replication, tags::Tags, target::BucketTargets, versioning::Versioning,
}; };
#[derive(Debug, Default)] use crate::error::Result;
use crate::disk::BUCKET_META_PREFIX;
pub const BUCKET_METADATA_FILE: &str = ".metadata.bin";
pub const BUCKET_METADATA_FORMAT: u16 = 1;
pub const BUCKET_METADATA_VERSION: u16 = 1;
#[derive(Debug, Deserialize, Serialize, Default)]
pub struct BucketMetadata { pub struct BucketMetadata {
format: u16, format: u16,
version: u16, version: u16,
@@ -37,21 +49,45 @@ pub struct BucketMetadata {
pub bucket_targets_config_meta_updated_at: Option<OffsetDateTime>, pub bucket_targets_config_meta_updated_at: Option<OffsetDateTime>,
// 新增UpdatedAt字段 // 新增UpdatedAt字段
new_field_updated_at: Option<OffsetDateTime>, pub new_field_updated_at: Option<OffsetDateTime>,
// 私有字段,需要原子更新 // 私有字段,需要原子更新
policy_config: Option<BucketPolicy>, // 假设Policy是一个已经定义好的结构体 pub policy_config: Option<BucketPolicy>, // 假设Policy是一个已经定义好的结构体
notification_config: Option<event::config::Config>, pub notification_config: Option<event::Config>,
lifecycle_config: Option<Lifecycle>, pub lifecycle_config: Option<Lifecycle>,
object_lock_config: Option<objectlock::Config>, pub object_lock_config: Option<objectlock::Config>,
versioning_config: Option<Versioning>, pub versioning_config: Option<Versioning>,
sse_config: Option<BucketSSEConfig>, pub sse_config: Option<BucketSSEConfig>,
tagging_config: Option<Tags>, pub tagging_config: Option<Tags>,
quota_config: Option<BucketQuota>, pub quota_config: Option<BucketQuota>,
replication_config: Option<replication::Config>, pub replication_config: Option<replication::Config>,
bucket_target_config: Option<BucketTargets>, pub bucket_target_config: Option<BucketTargets>,
bucket_target_config_meta: Option<std::collections::HashMap<String, String>>, pub bucket_target_config_meta: Option<HashMap<String, String>>,
} }
#[derive(Debug, Default)] impl BucketMetadata {
struct BucketTargets; pub fn new(name: &str) -> Self {
BucketMetadata {
format: BUCKET_METADATA_FORMAT,
version: BUCKET_METADATA_VERSION,
name: name.to_string(),
..Default::default()
}
}
pub fn save_file_path(&self) -> String {
format!("{}/{}/{}", BUCKET_META_PREFIX, self.name.as_str(), BUCKET_METADATA_FILE)
}
fn msg_size(&self) -> usize {
unimplemented!()
}
pub fn marshal_msg(&self) -> Result<Vec<u8>> {
unimplemented!()
}
pub fn unmarshal(_buf: &[u8]) -> Result<Self> {
unimplemented!()
}
}
+2
View File
@@ -9,3 +9,5 @@ mod replication;
mod tags; mod tags;
mod target; mod target;
mod versioning; mod versioning;
pub use metadata::BucketMetadata;
+7 -4
View File
@@ -1,5 +1,8 @@
#[derive(Debug, Clone, PartialEq, Eq, Hash)] use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize, Default, PartialEq, Eq, Hash)]
pub enum RetMode { pub enum RetMode {
#[default]
Govenance, Govenance,
Compliance, Compliance,
} }
@@ -17,19 +20,19 @@ impl std::str::FromStr for RetMode {
} }
} }
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct DefaultRetention { pub struct DefaultRetention {
pub mode: RetMode, pub mode: RetMode,
pub days: Option<usize>, pub days: Option<usize>,
pub years: Option<usize>, pub years: Option<usize>,
} }
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct Rule { pub struct Rule {
pub default_retention: DefaultRetention, pub default_retention: DefaultRetention,
} }
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct Config { pub struct Config {
pub object_lock_enabled: String, pub object_lock_enabled: String,
pub rule: Option<Rule>, pub rule: Option<Rule>,
+4 -3
View File
@@ -1,12 +1,13 @@
use std::{collections::HashSet, default}; use serde::{Deserialize, Serialize};
use std::collections::HashSet;
#[derive(Debug, Default)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct ActionSet(HashSet<Action>); pub struct ActionSet(HashSet<Action>);
impl ActionSet {} impl ActionSet {}
// 定义Action枚举类型 // 定义Action枚举类型
#[derive(Debug, Clone, PartialEq, Eq, Default)] #[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize, Default, Hash)]
pub enum Action { pub enum Action {
AbortMultipartUpload, AbortMultipartUpload,
CreateBucket, CreateBucket,
+4 -3
View File
@@ -1,3 +1,4 @@
use serde::{Deserialize, Serialize};
use std::collections::HashMap; use std::collections::HashMap;
use super::{ use super::{
@@ -8,7 +9,7 @@ use super::{
resource::ResourceSet, resource::ResourceSet,
}; };
#[derive(Debug, Default)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct BucketPolicyArgs { pub struct BucketPolicyArgs {
account_name: String, account_name: String,
groups: Vec<String>, groups: Vec<String>,
@@ -19,7 +20,7 @@ pub struct BucketPolicyArgs {
object_name: String, object_name: String,
} }
#[derive(Debug, Default)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct BPStatement { pub struct BPStatement {
sid: String, sid: String,
effect: Effect, effect: Effect,
@@ -31,7 +32,7 @@ pub struct BPStatement {
conditions: Option<Functions>, conditions: Option<Functions>,
} }
#[derive(Debug, Default)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct BucketPolicy { pub struct BucketPolicy {
pub id: String, pub id: String,
pub version: String, pub version: String,
+16 -26
View File
@@ -1,10 +1,10 @@
use super::name::Name;
use serde::{Deserialize, Serialize};
use std::{ use std::{
collections::{HashMap, HashSet}, collections::{HashMap, HashSet},
fmt::{Debug, Display}, fmt::Debug,
}; };
use super::name::Name;
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct Key { pub struct Key {
name: String, name: String,
@@ -15,7 +15,7 @@ pub struct Key {
pub type ValueSet = HashSet<String>; pub type ValueSet = HashSet<String>;
// 定义Function trait // 定义Function trait
pub trait Function { pub trait FunctionApi {
// evaluate方法 // evaluate方法
fn evaluate(&self, values: &HashMap<Key, ValueSet>) -> bool; fn evaluate(&self, values: &HashMap<Key, ValueSet>) -> bool;
@@ -32,34 +32,24 @@ pub trait Function {
fn to_map(&self) -> HashMap<Key, ValueSet>; fn to_map(&self) -> HashMap<Key, ValueSet>;
// clone方法 // clone方法
fn clone(&self) -> Box<dyn Function>; fn clone(&self) -> Box<Function>;
} }
impl Display for dyn Function { // impl Debug for dyn Function {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { // fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{:?}", self.to_string()) // write!(f, "{:?}", self.to_string())
} // }
} // }
impl Debug for dyn Function { #[derive(Debug, Deserialize, Serialize, Default)]
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { enum Function {
write!(f, "{:?}", self.to_string()) #[default]
} Test,
} }
// 定义Functions类型 // 定义Functions类型
pub struct Functions(Vec<Box<dyn Function>>); #[derive(Deserialize, Serialize, Default)]
pub struct Functions(Vec<Function>);
impl Display for Functions {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "[")?;
for v in self.0.iter() {
write!(f, "{:?}", v.to_string())?;
}
write!(f, "]")
}
}
impl Debug for Functions { impl Debug for Functions {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+2 -1
View File
@@ -1,6 +1,7 @@
use serde::{Deserialize, Serialize};
use std::str::FromStr; use std::str::FromStr;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] #[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize, Default)]
pub enum Effect { pub enum Effect {
#[default] #[default]
Allow, Allow,
+2 -1
View File
@@ -1,6 +1,7 @@
use serde::{Deserialize, Serialize};
use std::collections::HashSet; use std::collections::HashSet;
#[derive(Debug, Clone, Default)] #[derive(Debug, Clone, Deserialize, Serialize, Default)]
pub struct Principal { pub struct Principal {
aws: HashSet<String>, aws: HashSet<String>,
} }
+5 -4
View File
@@ -1,7 +1,8 @@
use std::{collections::HashSet, default}; use serde::{Deserialize, Serialize};
use std::collections::HashSet;
// 定义ResourceARNType枚举类型 // 定义ResourceARNType枚举类型
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deserialize, Serialize, Default)]
pub enum ResourceARNType { pub enum ResourceARNType {
#[default] #[default]
UnknownARN, UnknownARN,
@@ -14,11 +15,11 @@ const RESOURCE_ARN_PREFIX: &str = "arn:aws:s3:::";
const RESOURCE_ARN_KMS_PREFIX: &str = "arn:rustfs:kms::::"; const RESOURCE_ARN_KMS_PREFIX: &str = "arn:rustfs:kms::::";
// 定义Resource结构体 // 定义Resource结构体
#[derive(Debug, Default)] #[derive(Debug, Deserialize, Serialize, Default, PartialEq, Eq, Hash)]
pub struct Resource { pub struct Resource {
pattern: String, pattern: String,
r#type: ResourceARNType, r#type: ResourceARNType,
} }
#[derive(Debug, Default)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct ResourceSet(HashSet<Resource>); pub struct ResourceSet(HashSet<Resource>);
+2 -1
View File
@@ -1,7 +1,8 @@
use super::tag::Tag; use super::tag::Tag;
use serde::{Deserialize, Serialize};
// 定义And结构体 // 定义And结构体
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct And { pub struct And {
prefix: Option<String>, prefix: Option<String>,
tags: Option<Vec<Tag>>, tags: Option<Vec<Tag>>,
+2 -1
View File
@@ -1,8 +1,9 @@
use super::and::And; use super::and::And;
use super::tag::Tag; use super::tag::Tag;
use serde::{Deserialize, Serialize};
use std::collections::HashMap; use std::collections::HashMap;
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct Filter { pub struct Filter {
prefix: String, prefix: String,
and: And, and: And,
+4 -3
View File
@@ -1,11 +1,12 @@
use rule::Rule;
mod and; mod and;
mod filter; mod filter;
mod rule; mod rule;
mod tag; mod tag;
#[derive(Debug)] use rule::Rule;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize, Default)]
pub struct Config { pub struct Config {
rules: Vec<Rule>, rules: Vec<Rule>,
role_arn: String, role_arn: String,
+10 -8
View File
@@ -1,27 +1,29 @@
use super::filter::Filter; use super::filter::Filter;
use serde::{Deserialize, Serialize};
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub enum Status { pub enum Status {
#[default]
Enabled, Enabled,
Disabled, Disabled,
} }
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct DeleteMarkerReplication { pub struct DeleteMarkerReplication {
pub status: Status, pub status: Status,
} }
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct DeleteReplication { pub struct DeleteReplication {
pub status: Status, pub status: Status,
} }
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct ExistingObjectReplication { pub struct ExistingObjectReplication {
pub status: Status, pub status: Status,
} }
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct Destination { pub struct Destination {
pub bucket: String, pub bucket: String,
pub storage_class: String, pub storage_class: String,
@@ -29,18 +31,18 @@ pub struct Destination {
} }
// 定义ReplicaModifications结构体 // 定义ReplicaModifications结构体
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct ReplicaModifications { pub struct ReplicaModifications {
status: Status, status: Status,
} }
// 定义SourceSelectionCriteria结构体 // 定义SourceSelectionCriteria结构体
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct SourceSelectionCriteria { pub struct SourceSelectionCriteria {
replica_modifications: ReplicaModifications, replica_modifications: ReplicaModifications,
} }
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct Rule { pub struct Rule {
pub id: String, pub id: String,
pub status: Status, pub status: Status,
+3 -1
View File
@@ -1,4 +1,6 @@
#[derive(Debug)] use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize, Default)]
pub struct Tag { pub struct Tag {
pub key: Option<String>, pub key: Option<String>,
pub value: Option<String>, pub value: Option<String>,
+42 -63
View File
@@ -1,6 +1,8 @@
use serde::{Deserialize, Serialize};
use std::time::Duration;
use time::OffsetDateTime; use time::OffsetDateTime;
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct Credentials { pub struct Credentials {
access_key: String, access_key: String,
secret_key: String, secret_key: String,
@@ -8,93 +10,70 @@ pub struct Credentials {
expiration: Option<OffsetDateTime>, expiration: Option<OffsetDateTime>,
} }
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub enum ServiceType { pub enum ServiceType {
#[default]
Replication, Replication,
} }
// pub struct LatencyStat { #[derive(Debug, Deserialize, Serialize, Default)]
// curr: Duration, // 当前延迟 pub struct LatencyStat {
// avg: Duration, // 平均延迟 curr: Duration, // 当前延迟
// max: Duration, // 最大延迟 avg: Duration, // 平均延迟
// } max: Duration, // 最大延迟
}
// #[derive(Serialize, Deserialize, Debug)] // 定义BucketTarget结构体
// pub struct LatencyStat { #[derive(Debug, Deserialize, Serialize, Default)]
// curr: Duration, pub struct BucketTarget {
// avg: Duration, source_bucket: String,
// max: Duration,
// }
// // 定义BucketTarget结构体 endpoint: String,
// #[derive(Serialize, Deserialize, Debug)]
// pub struct BucketTarget {
// #[serde(rename = "sourcebucket")]
// source_bucket: String,
// #[serde(rename = "endpoint")] credentials: Option<Credentials>,
// endpoint: String,
// #[serde(rename = "credentials")] target_bucket: String,
// credentials: Option<Credentials>,
// #[serde(rename = "targetbucket")] secure: bool,
// target_bucket: String,
// #[serde(rename = "secure")] path: Option<String>,
// secure: bool,
// #[serde(rename = "path", skip_serializing_if = "Option::is_none")] api: Option<String>,
// path: Option<String>,
// #[serde(rename = "api", skip_serializing_if = "Option::is_none")] arn: Option<String>,
// api: Option<String>,
// #[serde(rename = "arn", skip_serializing_if = "Option::is_none")] type_: ServiceType,
// arn: Option<String>,
// #[serde(rename = "type")] region: Option<String>,
// type_: ServiceType,
// #[serde(rename = "region", skip_serializing_if = "Option::is_none")] bandwidth_limit: Option<i64>,
// region: Option<String>,
// #[serde(rename = "bandwidthlimit")] replication_sync: bool,
// bandwidth_limit: Option<i64>,
// #[serde(rename = "replicationSync")] storage_class: Option<String>,
// replication_sync: bool,
// #[serde(rename = "storageclass", skip_serializing_if = "Option::is_none")] health_check_duration: Option<Duration>,
// storage_class: Option<String>,
// #[serde(rename = "healthCheckDuration")] disable_proxy: bool,
// health_check_duration: Option<Duration>,
// #[serde(rename = "disableProxy")] reset_before_date: Option<OffsetDateTime>,
// disable_proxy: bool,
// #[serde(rename = "resetBeforeDate", skip_serializing_if = "Option::is_none")] reset_id: Option<String>,
// reset_before_date: Option<SystemTime>,
// #[serde(rename = "resetID", skip_serializing_if = "Option::is_none")] total_downtime: Duration,
// reset_id: Option<String>,
// #[serde(rename = "totalDowntime")] last_online: Option<OffsetDateTime>,
// total_downtime: Duration,
// #[serde(rename = "lastOnline")] online: bool,
// last_online: SystemTime,
// #[serde(rename = "isOnline")] latency: LatencyStat,
// online: bool,
// #[serde(rename = "latency")] deployment_id: Option<String>,
// latency: LatencyStat,
// #[serde(rename = "deploymentID", skip_serializing_if = "Option::is_none")] edge: bool,
// deployment_id: Option<String>, }
// #[serde(rename = "edge")] #[derive(Debug, Deserialize, Serialize, Default)]
// edge: bool, pub struct BucketTargets {
// } pub targets: Vec<BucketTarget>,
}
+6 -3
View File
@@ -1,5 +1,8 @@
#[derive(Debug, Clone, PartialEq, Eq, Hash)] use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Hash, Default, Deserialize, Serialize)]
pub enum State { pub enum State {
#[default]
Enabled, Enabled,
Suspended, Suspended,
// 如果未来可能会使用到Disabled状态,可以在这里添加 // 如果未来可能会使用到Disabled状态,可以在这里添加
@@ -22,12 +25,12 @@ impl std::fmt::Display for State {
} }
} }
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct ExcludedPrefix { pub struct ExcludedPrefix {
pub prefix: String, pub prefix: String,
} }
#[derive(Debug)] #[derive(Debug, Deserialize, Serialize, Default)]
pub struct Versioning { pub struct Versioning {
pub status: State, pub status: State,
pub excluded_prefixes: Vec<ExcludedPrefix>, pub excluded_prefixes: Vec<ExcludedPrefix>,
+3 -1
View File
@@ -364,6 +364,7 @@ pub struct ReadOptions {
// } // }
// } // }
#[derive(Debug)]
pub enum FileWriter { pub enum FileWriter {
Local(LocalFileWriter), Local(LocalFileWriter),
Remote(RemoteFileWriter), Remote(RemoteFileWriter),
@@ -378,7 +379,7 @@ impl Write for FileWriter {
} }
} }
} }
#[derive(Debug)]
pub struct LocalFileWriter { pub struct LocalFileWriter {
pub inner: File, pub inner: File,
} }
@@ -399,6 +400,7 @@ impl Write for LocalFileWriter {
} }
} }
#[derive(Debug)]
pub struct RemoteFileWriter { pub struct RemoteFileWriter {
pub root: PathBuf, pub root: PathBuf,
pub volume: String, pub volume: String,
+1 -1
View File
@@ -16,4 +16,4 @@ pub mod store_api;
mod store_init; mod store_init;
mod utils; mod utils;
mod bucket; pub mod bucket;
+1 -1
View File
@@ -1,6 +1,6 @@
#![allow(clippy::map_entry)] #![allow(clippy::map_entry)]
use crate::{ use crate::{
bucket_meta::BucketMetadata, bucket::BucketMetadata,
disk::{error::DiskError, new_disk, DiskOption, DiskStore, WalkDirOptions, BUCKET_META_PREFIX, RUSTFS_META_BUCKET}, disk::{error::DiskError, new_disk, DiskOption, DiskStore, WalkDirOptions, BUCKET_META_PREFIX, RUSTFS_META_BUCKET},
endpoints::{EndpointServerPools, SetupType}, endpoints::{EndpointServerPools, SetupType},
error::{Error, Result}, error::{Error, Result},