Struct matterdb::ReadonlyFork [−][src]
Readonly wrapper for a Fork
.
This wrapper allows to read from index state from the fork in a type-safe manner (it is impossible to accidentally modify data in the index), and without encountering runtime errors when attempting to concurrently get the same index more than once.
Since the wrapper borrows the Fork
immutably, it is still possible to access indexes
in the fork directly. In this scenario, the caller should be careful that ReadonlyFork
does not access the same indexes as the original Fork
: this will result in a runtime
error (sort of like attempting both an exclusive and a shared borrow from a RefCell
or RwLock
).
Examples
let db = TemporaryDB::new(); let fork = db.fork(); fork.get_list("list").push(1_u32); let readonly: ReadonlyFork<'_> = fork.readonly(); let list = readonly.get_list::<_, u32>("list"); assert_eq!(list.get(0), Some(1)); let same_list = readonly.get_list::<_, u32>("list"); // ^-- Does not result in an error! // Original fork is still accessible. let mut map = fork.get_map("map"); map.put(&1_u32, "foo".to_string());
There are no write methods in indexes instantiated from ReadonlyFork
:
let db = TemporaryDB::new(); let fork = db.fork(); let readonly: ReadonlyFork<'_> = fork.readonly(); let mut list = readonly.get_list("list"); list.push(1_u32); // Won't compile: no `push` method in `ListIndex<ReadonlyFork, u32>`!
Trait Implementations
impl<'a> AsReadonly for ReadonlyFork<'a>
[src]
impl<'a> Clone for ReadonlyFork<'a>
[src]
fn clone(&self) -> ReadonlyFork<'a>
[src]
pub fn clone_from(&mut self, source: &Self)
1.0.0[src]
impl<'a> Copy for ReadonlyFork<'a>
[src]
impl<'a> Debug for ReadonlyFork<'a>
[src]
impl<'a> From<ReadonlyFork<'a>> for GenericRawAccess<'a>
[src]
fn from(ro_fork: ReadonlyFork<'a>) -> Self
[src]
impl<'a> IntoErased<'a> for ReadonlyFork<'a>
[src]
fn into_erased(self) -> ErasedAccess<'a>
[src]
impl<'a> RawAccess for ReadonlyFork<'a>
[src]
Auto Trait Implementations
impl<'a> !RefUnwindSafe for ReadonlyFork<'a>
impl<'a> !Send for ReadonlyFork<'a>
impl<'a> !Sync for ReadonlyFork<'a>
impl<'a> Unpin for ReadonlyFork<'a>
impl<'a> !UnwindSafe for ReadonlyFork<'a>
Blanket Implementations
impl<T> Access for T where
T: RawAccess,
[src]
T: RawAccess,
type Base = T
Raw access serving as the basis for created indexes.
pub fn get_index_metadata(
Self,
IndexAddress
) -> Result<Option<IndexMetadata<Vec<u8, Global>>>, AccessError>
[src]
Self,
IndexAddress
) -> Result<Option<IndexMetadata<Vec<u8, Global>>>, AccessError>
pub fn get_or_create_view(
Self,
IndexAddress,
IndexType
) -> Result<ViewWithMetadata<<T as Access>::Base>, AccessError>
[src]
Self,
IndexAddress,
IndexType
) -> Result<ViewWithMetadata<<T as Access>::Base>, AccessError>
pub fn group_keys<K>(Self, IndexAddress) -> GroupKeys<<T as Access>::Base, K> where
K: BinaryKey + ?Sized,
<T as Access>::Base: AsReadonly,
<<T as Access>::Base as AsReadonly>::Readonly == <T as Access>::Base,
[src]
K: BinaryKey + ?Sized,
<T as Access>::Base: AsReadonly,
<<T as Access>::Base as AsReadonly>::Readonly == <T as Access>::Base,
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> Pointable for T
pub const ALIGN: usize
type Init = T
The type for initializers.
pub unsafe fn init(init: <T as Pointable>::Init) -> usize
pub unsafe fn deref<'a>(ptr: usize) -> &'a T
pub unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T
pub unsafe fn drop(ptr: usize)
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,