diff options
author | Quentin Dufour <quentin@deuxfleurs.fr> | 2023-11-02 09:57:58 +0100 |
---|---|---|
committer | Quentin Dufour <quentin@deuxfleurs.fr> | 2023-11-02 09:57:58 +0100 |
commit | 415f51ac4cfc723bbf6f0c08d57fb86e96c665a2 (patch) | |
tree | 87b709d947093781bc787a741f661b9b3e436bdb /src | |
parent | 26f14df3f460320b2e2d31deb9d3cef90f43790c (diff) | |
download | aerogramme-415f51ac4cfc723bbf6f0c08d57fb86e96c665a2.tar.gz aerogramme-415f51ac4cfc723bbf6f0c08d57fb86e96c665a2.zip |
sadly switch to dynamic dispatch
Diffstat (limited to 'src')
-rw-r--r-- | src/storage/garage.rs | 16 | ||||
-rw-r--r-- | src/storage/in_memory.rs | 16 | ||||
-rw-r--r-- | src/storage/mod.rs | 48 |
3 files changed, 24 insertions, 56 deletions
diff --git a/src/storage/garage.rs b/src/storage/garage.rs index b883623..965953e 100644 --- a/src/storage/garage.rs +++ b/src/storage/garage.rs @@ -5,27 +5,19 @@ pub struct GrgStore {} pub struct GrgRef {} pub struct GrgValue {} -pub struct GrgTypes {} -impl Sto for GrgTypes { - type Builder=GrgCreds; - type Store=GrgStore; - type Ref=GrgRef; - type Value=GrgValue; -} - -impl RowBuilder<GrgTypes> for GrgCreds { +impl IRowBuilder for GrgCreds { fn row_store(&self) -> GrgStore { unimplemented!(); } } -impl RowStore<GrgTypes> for GrgStore { +impl IRowStore for GrgStore { fn new_row(&self, partition: &str, sort: &str) -> GrgRef { unimplemented!(); } } -impl RowRef<GrgTypes> for GrgRef { +impl IRowRef for GrgRef { fn set_value(&self, content: Vec<u8>) -> GrgValue { unimplemented!(); } @@ -40,7 +32,7 @@ impl RowRef<GrgTypes> for GrgRef { } } -impl RowValue<GrgTypes> for GrgValue { +impl IRowValue for GrgValue { fn to_ref(&self) -> GrgRef { unimplemented!(); } diff --git a/src/storage/in_memory.rs b/src/storage/in_memory.rs index 56df266..dc3d1e1 100644 --- a/src/storage/in_memory.rs +++ b/src/storage/in_memory.rs @@ -5,27 +5,19 @@ pub struct MemStore {} pub struct MemRef {} pub struct MemValue {} -pub struct MemTypes {} -impl Sto for MemTypes { - type Builder=MemCreds; - type Store=MemStore; - type Ref=MemRef; - type Value=MemValue; -} - -impl RowBuilder<MemTypes> for MemCreds { +impl IRowBuilder for MemCreds { fn row_store(&self) -> MemStore { unimplemented!(); } } -impl RowStore<MemTypes> for MemStore { +impl IRowStore for MemStore { fn new_row(&self, partition: &str, sort: &str) -> MemRef { unimplemented!(); } } -impl RowRef<MemTypes> for MemRef { +impl IRowRef for MemRef { fn set_value(&self, content: Vec<u8>) -> MemValue { unimplemented!(); } @@ -40,7 +32,7 @@ impl RowRef<MemTypes> for MemRef { } } -impl RowValue<MemTypes> for MemValue { +impl IRowValue for MemValue { fn to_ref(&self) -> MemRef { unimplemented!(); } diff --git a/src/storage/mod.rs b/src/storage/mod.rs index ee475ee..82f7c6a 100644 --- a/src/storage/mod.rs +++ b/src/storage/mod.rs @@ -28,55 +28,39 @@ pub enum Error { Internal, } -pub trait Sto: Sized { - type Builder: RowBuilder<Self>; - type Store: RowStore<Self>; - type Ref: RowRef<Self>; - type Value: RowValue<Self>; -} - -pub struct Engine<T: Sto> { +pub struct Engine { pub bucket: String, - pub row: T::Builder, -} - -pub enum AnyEngine { - InMemory(Engine<in_memory::MemTypes>), - Garage(Engine<garage::GrgTypes>), -} -impl AnyEngine { - pub fn engine<X: Sto>(&self) -> &Engine<X> { - match self { - Self::InMemory(x) => x, - Self::Garage(x) => x, - } - } + pub row: RowBuilder, } // ------ Row Builder -pub trait RowBuilder<R: Sto> +pub trait IRowBuilder { - fn row_store(&self) -> R::Store; + fn row_store(&self) -> RowStore; } +pub type RowBuilder = Box<dyn IRowBuilder>; // ------ Row Store -pub trait RowStore<R: Sto> +pub trait IRowStore { - fn new_row(&self, partition: &str, sort: &str) -> R::Ref; + fn new_row(&self, partition: &str, sort: &str) -> RowRef; } +type RowStore = Box<dyn IRowStore>; // ------- Row Item -pub trait RowRef<R: Sto> +pub trait IRowRef { - fn set_value(&self, content: Vec<u8>) -> R::Value; - async fn fetch(&self) -> Result<R::Value, Error>; + fn set_value(&self, content: Vec<u8>) -> RowValue; + async fn fetch(&self) -> Result<RowValue, Error>; async fn rm(&self) -> Result<(), Error>; - async fn poll(&self) -> Result<Option<R::Value>, Error>; + async fn poll(&self) -> Result<Option<RowValue>, Error>; } +type RowRef = Box<dyn IRowRef>; -pub trait RowValue<R: Sto> +pub trait IRowValue { - fn to_ref(&self) -> R::Ref; + fn to_ref(&self) -> RowRef; fn content(&self) -> ConcurrentValues; async fn push(&self) -> Result<(), Error>; } +type RowValue = Box<dyn IRowValue>; |