diff options
Diffstat (limited to 'src/table/schema.rs')
-rw-r--r-- | src/table/schema.rs | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/table/schema.rs b/src/table/schema.rs index 44b10898..7daf3000 100644 --- a/src/table/schema.rs +++ b/src/table/schema.rs @@ -8,6 +8,8 @@ use garage_util::migrate::Migrate; use crate::crdt::Crdt; +// =================================== PARTITION KEYS + /// Trait for field used to partition data pub trait PartitionKey: Clone + PartialEq + Serialize + for<'de> Deserialize<'de> + Send + Sync + 'static @@ -31,6 +33,8 @@ impl PartitionKey for FixedBytes32 { } } +// =================================== SORT KEYS + /// Trait for field used to sort data pub trait SortKey: Clone + Serialize + for<'de> Deserialize<'de> + Send + Sync + 'static { /// Get the key used to sort @@ -49,6 +53,14 @@ impl SortKey for FixedBytes32 { } } +impl SortKey for u32 { + fn sort_key(&self) -> Cow<'_, [u8]> { + Cow::from(u32::to_be_bytes(*self).to_vec()) + } +} + +// =================================== SCHEMA + /// Trait for an entry in a table. It must be sortable and partitionnable. pub trait Entry<P: PartitionKey, S: SortKey>: Crdt + PartialEq + Clone + Migrate + Send + Sync + 'static |