aboutsummaryrefslogtreecommitdiff
path: root/src/data.rs
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2020-04-05 23:33:42 +0200
committerAlex Auvolat <alex@adnab.me>2020-04-05 23:33:42 +0200
commit7102db1d544bec663a8492b24c455168d0b83f08 (patch)
treecc308cbeefc3f48b55149e85ec737867c24a498e /src/data.rs
downloadgarage-7102db1d544bec663a8492b24c455168d0b83f08.tar.gz
garage-7102db1d544bec663a8492b24c455168d0b83f08.zip
First commit: skeleton for something great
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>,
+}