use common::error::Result; use rmp_serde::Serializer as rmpSerializer; use serde::{Deserialize, Serialize}; use std::time::Duration; use time::OffsetDateTime; #[derive(Debug, Deserialize, Serialize, Default, Clone)] pub struct Credentials { access_key: String, secret_key: String, session_token: Option, expiration: Option, } #[derive(Debug, Deserialize, Serialize, Default, Clone)] pub enum ServiceType { #[default] Replication, } #[derive(Debug, Deserialize, Serialize, Default, Clone)] pub struct LatencyStat { curr: Duration, // 当前延迟 avg: Duration, // 平均延迟 max: Duration, // 最大延迟 } // 定义BucketTarget结构体 #[derive(Debug, Deserialize, Serialize, Default, Clone)] pub struct BucketTarget { source_bucket: String, endpoint: String, credentials: Option, target_bucket: String, secure: bool, path: Option, api: Option, arn: Option, type_: ServiceType, region: Option, bandwidth_limit: Option, replication_sync: bool, storage_class: Option, health_check_duration: Option, disable_proxy: bool, reset_before_date: Option, reset_id: Option, total_downtime: Duration, last_online: Option, online: bool, latency: LatencyStat, deployment_id: Option, edge: bool, } #[derive(Debug, Deserialize, Serialize, Default, Clone)] pub struct BucketTargets { pub targets: Vec, } impl BucketTargets { pub fn marshal_msg(&self) -> Result> { let mut buf = Vec::new(); self.serialize(&mut rmpSerializer::new(&mut buf).with_struct_map())?; Ok(buf) } pub fn unmarshal(buf: &[u8]) -> Result { let t: BucketTargets = rmp_serde::from_slice(buf)?; Ok(t) } }