the state before switching to dynamic dispatch for stores
This commit is contained in:
@@ -130,7 +130,19 @@ impl<S: Store> Instance<S> {
|
||||
//fn from(value: T) -> Self {
|
||||
//}
|
||||
//}
|
||||
pub fn migrate_to_store<New: Store>(&mut self, new_store: New) -> MizeResult<Instance<New>> {
|
||||
let old_store = self.store;
|
||||
|
||||
for id in old_store.id_iter()? {
|
||||
let data = self.store.get_value_data_full(self.id_from_string(id))?;
|
||||
|
||||
let id_of_new_store = new_store.new_id()?;
|
||||
new_store.set(self.id_from_string(id_of_new_store), data.to_owned())?;
|
||||
};
|
||||
|
||||
self.store = new_store as S;
|
||||
Ok(Instance { store: new_store, subs: self.subs, peers: self.peers, id_pool: self.id_pool })
|
||||
}
|
||||
}
|
||||
|
||||
impl<S: Store> fmt::Debug for Instance<S> {
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
|
||||
use std::iter::Map;
|
||||
use std::option::Iter;
|
||||
|
||||
use crate::error::MizeResult;
|
||||
use crate::item::{Item, ItemData};
|
||||
use crate::id::MizeId;
|
||||
use crate::memstore::MemStore;
|
||||
use crate::instance::Instance;
|
||||
|
||||
pub trait Store {
|
||||
// should have the ability to be multi threaded, if the underlying implementation supports
|
||||
@@ -23,5 +29,7 @@ pub trait Store {
|
||||
fn get_value_raw(&self, id: MizeId) -> MizeResult<Vec<u8>>;
|
||||
|
||||
fn get_value_data_full(&self, id: MizeId) -> MizeResult<ItemData>;
|
||||
|
||||
fn id_iter(&self) -> MizeResult<impl Iterator<Item=String> + '_>;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user