use std::collections::HashMap; use rmp_serde::Serializer; use serde::{Deserialize, Serialize}; use time::OffsetDateTime; 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, PartialEq, Deserialize, Serialize, Default)] pub struct BucketMetadata { format: u16, version: u16, pub name: String, #[serde(skip_serializing_if = "Option::is_none", default)] pub tagging: Option>, #[serde(skip_serializing_if = "Option::is_none", default)] pub created: Option, } // impl Default for BucketMetadata { // fn default() -> Self { // Self { // format: Default::default(), // version: Default::default(), // name: Default::default(), // created: OffsetDateTime::now_utc(), // } // } // } impl BucketMetadata { 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) // PathBuf::new() // .join(BUCKET_META_PREFIX) // .join(self.name.as_str()) // .join(BUCKET_METADATA_FILE) } pub fn marshal_msg(&self) -> Result> { let mut buf = Vec::new(); self.serialize(&mut Serializer::new(&mut buf))?; Ok(buf) } pub fn unmarshal_from(buffer: &[u8]) -> Result { Ok(rmp_serde::from_slice(buffer)?) } }