diff --git a/storage/src/lib.rs b/storage/src/lib.rs index 6ee9bb4..bbda2b9 100644 --- a/storage/src/lib.rs +++ b/storage/src/lib.rs @@ -5,6 +5,7 @@ mod rc_key; mod serde_rc; mod sled_backend; mod storage_backend; +mod storage_entry; mod storage_ops; mod storage_ptr; mod storage_val; diff --git a/storage/src/storage_entry.rs b/storage/src/storage_entry.rs new file mode 100644 index 0000000..418b057 --- /dev/null +++ b/storage/src/storage_entry.rs @@ -0,0 +1,37 @@ +use std::rc::Rc; + +use serde::{Deserialize, Serialize}; + +use crate::{ + storage_ptr::StorageEntryPtr, + storage_val::{StorageCompoundVal, StorageVal}, +}; + +#[derive(Serialize, Deserialize)] +pub struct StorageEntry { + pub(crate) ref_count: u64, + pub(crate) refs: Vec, + pub(crate) data: Vec, +} + +impl StorageEntry { + pub fn move_to_val(self) -> StorageVal { + let Self { + ref_count: _, + refs, + data, + } = self; + + let mut val = bincode::deserialize::(&data).unwrap(); + + if let StorageVal::Compound(compound) = &mut val { + match Rc::get_mut(compound).expect("Should be single ref") { + StorageCompoundVal::Array(arr) => { + arr.refs = refs; + } + } + }; + + val + } +} diff --git a/storage/src/storage_ptr.rs b/storage/src/storage_ptr.rs index ca959cb..26ee6ad 100644 --- a/storage/src/storage_ptr.rs +++ b/storage/src/storage_ptr.rs @@ -2,7 +2,7 @@ use std::hash::Hash; use rand::{rngs::ThreadRng, Rng}; -use crate::storage_val::StorageEntry; +use crate::storage_entry::StorageEntry; #[derive(serde::Serialize, serde::Deserialize, Hash, PartialEq, Eq)] pub struct StoragePtr { diff --git a/storage/src/storage_val.rs b/storage/src/storage_val.rs index 93bbc93..0e89a24 100644 --- a/storage/src/storage_val.rs +++ b/storage/src/storage_val.rs @@ -5,6 +5,7 @@ use serde::{Deserialize, Serialize}; use crate::rc_key::RcKey; use crate::serde_rc::{deserialize_rc, serialize_rc}; +use crate::storage_entry::StorageEntry; use crate::storage_ops::StorageOps; use crate::storage_ptr::StorageEntryPtr; @@ -189,36 +190,6 @@ impl StorageVal { } } -#[derive(Serialize, Deserialize)] -pub struct StorageEntry { - pub(crate) ref_count: u64, - pub(crate) refs: Vec, - - data: Vec, -} - -impl StorageEntry { - pub fn move_to_val(self) -> StorageVal { - let Self { - ref_count: _, - refs, - data, - } = self; - - let mut val = bincode::deserialize::(&data).unwrap(); - - if let StorageVal::Compound(compound) = &mut val { - match Rc::get_mut(compound).expect("Should be single ref") { - StorageCompoundVal::Array(arr) => { - arr.refs = refs; - } - } - }; - - val - } -} - fn cache_and_store>( tx: &mut SO, val: &StorageVal,