aboutsummaryrefslogtreecommitdiff
path: root/src/data.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/data.rs')
-rw-r--r--src/data.rs75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/data.rs b/src/data.rs
new file mode 100644
index 00000000..651a9d45
--- /dev/null
+++ b/src/data.rs
@@ -0,0 +1,75 @@
+use std::net::SocketAddr;
+
+use serde::{Serialize, Deserialize};
+
+pub type UUID = [u8; 32];
+pub type Hash = [u8; 32];
+
+// Membership management
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct NodeStatus {
+ id: UUID,
+ time: u64,
+ addr: SocketAddr,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct NodeConfig {
+ id: UUID,
+ n_tokens: u32,
+}
+
+#[derive(Default, Debug, Clone, Serialize, Deserialize)]
+pub struct NetworkMembers {
+ pings: Vec<NodeStatus>,
+ desired_state: Vec<NodeConfig>,
+ desired_state_version: u64,
+}
+
+// Data management
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct SplitpointMeta {
+ bucket: String,
+ key: String,
+
+ timestamp: u64,
+ uuid: UUID,
+ deleted: bool,
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct VersionMeta {
+ bucket: String,
+ key: String,
+
+ timestamp: u64,
+ uuid: UUID,
+ deleted: bool,
+
+ mime_type: String,
+ size: u64,
+ is_complete: bool,
+
+ data: VersionData,
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+pub enum VersionData {
+ Inline(Vec<u8>),
+ FirstBlock(Hash),
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct BlockMeta {
+ version_uuid: UUID,
+ offset: u64,
+ hash: Hash,
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct BlockReverseMeta {
+ versions: Vec<UUID>,
+ deleted_versions: Vec<UUID>,
+}