use derive_more::{Display, From};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, Display, From)]
pub struct ContainerId(pub String);
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, Display, From)]
pub struct ObjectId(pub String);
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, Display, From)]
pub struct OwnerId(pub String);
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PlacementPolicy {
pub replicas: u32,
pub selectors: Vec<Selector>,
pub filters: Vec<Filter>,
}
impl Default for PlacementPolicy {
fn default() -> Self {
Self { replicas: 3, selectors: Vec::new(), filters: Vec::new() }
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Selector {
pub name: String,
pub count: u32,
pub attribute: String,
pub clause: ClauseOperator,
pub value: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Filter {
pub name: String,
pub key: String,
pub operation: MatchOperator,
pub value: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ClauseOperator {
EQ,
NE,
GT,
GE,
LT,
LE,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum MatchOperator {
EQ,
NE,
RE,
NRE,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ObjectType {
Regular,
Tombstone,
StorageGroup,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Attributes {
pub attributes: HashMap<String, String>,
}
impl Attributes {
pub fn new() -> Self {
Self { attributes: HashMap::new() }
}
pub fn add(&mut self, key: impl Into<String>, value: impl Into<String>) {
self.attributes.insert(key.into(), value.into());
}
pub fn get(&self, key: &str) -> Option<&String> {
self.attributes.get(key)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum AccessPermission {
PutObject,
GetObject,
HeadObject,
DeleteObject,
SearchObject,
GetEACL,
SetEACL,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SessionToken {
pub token_id: String,
pub owner_id: OwnerId,
pub expires_at: u64,
pub signature: Vec<u8>,
}