use crate::{errors::Result, server::cloud::iter::AsyncObjectIterator};
use async_trait::async_trait;
pub(in crate::server) struct ObjectInfo {
pub(in crate::server) name: String,
pub(in crate::server) creation: u64,
}
#[async_trait]
pub(in crate::server) trait Service {
async fn put(&mut self, name: &str, value: &[u8]) -> Result<()>;
async fn get(&mut self, name: &str) -> Result<Option<Vec<u8>>>;
async fn del(&mut self, name: &str) -> Result<()>;
async fn list<'a>(&'a mut self, prefix: &'a str) -> Box<dyn AsyncObjectIterator + Send + 'a>;
async fn compare_and_swap(
&mut self,
name: &str,
existing_value: Option<Vec<u8>>,
new_value: Vec<u8>,
) -> Result<bool>;
}
pub(in crate::server) fn validate_object_name(name: &str) {
debug_assert!(name.is_ascii());
debug_assert!(name.len() <= 100);
debug_assert!(name.chars().all(|c| c.is_ascii_alphanumeric() || c == '-'));
}