2020-04-08 20:00:41 +00:00
|
|
|
use std::sync::Arc;
|
|
|
|
use serde::{Serialize, Deserialize};
|
|
|
|
use async_trait::async_trait;
|
2020-04-08 21:01:49 +00:00
|
|
|
use tokio::sync::RwLock;
|
2020-04-08 20:00:41 +00:00
|
|
|
|
|
|
|
use crate::data::*;
|
|
|
|
use crate::table::*;
|
2020-04-08 21:01:49 +00:00
|
|
|
use crate::server::Garage;
|
2020-04-08 20:00:41 +00:00
|
|
|
|
|
|
|
|
2020-04-08 21:01:49 +00:00
|
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
2020-04-08 20:00:41 +00:00
|
|
|
pub struct VersionMetaKey {
|
|
|
|
pub bucket: String,
|
|
|
|
pub key: String,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
|
|
|
pub struct VersionMetaValue {
|
|
|
|
pub timestamp: u64,
|
|
|
|
pub uuid: UUID,
|
|
|
|
|
|
|
|
pub mime_type: String,
|
|
|
|
pub size: u64,
|
|
|
|
pub is_complete: bool,
|
|
|
|
|
|
|
|
pub data: VersionData,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
|
|
|
pub enum VersionData {
|
|
|
|
DeleteMarker,
|
|
|
|
Inline(#[serde(with="serde_bytes")] Vec<u8>),
|
|
|
|
FirstBlock(Hash),
|
|
|
|
}
|
|
|
|
|
|
|
|
pub struct VersionTable {
|
2020-04-08 21:01:49 +00:00
|
|
|
pub garage: RwLock<Option<Arc<Garage>>>,
|
2020-04-08 20:00:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl KeyHash for VersionMetaKey {
|
|
|
|
fn hash(&self) -> Hash {
|
|
|
|
hash(self.bucket.as_bytes())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl ValueMerge for VersionMetaValue {
|
|
|
|
fn merge(&mut self, other: &Self) {
|
|
|
|
unimplemented!()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[async_trait]
|
|
|
|
impl TableFormat for VersionTable {
|
|
|
|
type K = VersionMetaKey;
|
|
|
|
type V = VersionMetaValue;
|
|
|
|
|
|
|
|
async fn updated(&self, key: &Self::K, old: Option<&Self::V>, new: &Self::V) {
|
|
|
|
unimplemented!()
|
|
|
|
}
|
|
|
|
}
|