pub struct ByteMapView<C, V> { /* private fields */ }Expand description
A view that supports inserting and removing values indexed by Vec<u8>.
Implementations§
Source§impl<C, V> ByteMapView<C, V>where
C: Context,
impl<C, V> ByteMapView<C, V>where
C: Context,
Sourcepub fn insert(&mut self, short_key: Vec<u8>, value: V)
pub fn insert(&mut self, short_key: Vec<u8>, value: V)
Inserts or resets the value of a key of the map.
let mut map = ByteMapView::load(context).await.unwrap();
map.insert(vec![0, 1], String::from("Hello"));
assert_eq!(map.keys().await.unwrap(), vec![vec![0, 1]]);Sourcepub fn remove(&mut self, short_key: Vec<u8>)
pub fn remove(&mut self, short_key: Vec<u8>)
Removes a value. If absent then nothing is done.
let mut map = ByteMapView::load(context).await.unwrap();
map.insert(vec![0, 1], "Hello");
map.remove(vec![0, 1]);Sourcepub fn remove_by_prefix(&mut self, key_prefix: Vec<u8>)
pub fn remove_by_prefix(&mut self, key_prefix: Vec<u8>)
Removes a value. If absent then nothing is done.
let mut map = ByteMapView::load(context).await.unwrap();
map.insert(vec![0, 1], String::from("Hello"));
map.insert(vec![0, 2], String::from("Bonjour"));
map.remove_by_prefix(vec![0]);
assert!(map.keys().await.unwrap().is_empty());Sourcepub async fn contains_key(&self, short_key: &[u8]) -> Result<bool, ViewError>
pub async fn contains_key(&self, short_key: &[u8]) -> Result<bool, ViewError>
Returns true if the map contains a value for the specified key.
let mut map = ByteMapView::load(context).await.unwrap();
map.insert(vec![0, 1], String::from("Hello"));
assert!(map.contains_key(&[0, 1]).await.unwrap());
assert!(!map.contains_key(&[0, 2]).await.unwrap());Source§impl<C, V> ByteMapView<C, V>
impl<C, V> ByteMapView<C, V>
Sourcepub async fn get(&self, short_key: &[u8]) -> Result<Option<V>, ViewError>
pub async fn get(&self, short_key: &[u8]) -> Result<Option<V>, ViewError>
Reads the value at the given position, if any.
let mut map = ByteMapView::load(context).await.unwrap();
map.insert(vec![0, 1], String::from("Hello"));
assert_eq!(map.get(&[0, 1]).await.unwrap(), Some(String::from("Hello")));Sourcepub async fn multi_get(
&self,
short_keys: Vec<Vec<u8>>,
) -> Result<Vec<Option<V>>, ViewError>
pub async fn multi_get( &self, short_keys: Vec<Vec<u8>>, ) -> Result<Vec<Option<V>>, ViewError>
Reads the values at the given positions, if any.
let mut map = ByteMapView::load(context).await.unwrap();
map.insert(vec![0, 1], String::from("Hello"));
let values = map.multi_get(vec![vec![0, 1], vec![0, 2]]).await.unwrap();
assert_eq!(values, vec![Some(String::from("Hello")), None]);Sourcepub async fn multi_get_pairs(
&self,
short_keys: Vec<Vec<u8>>,
) -> Result<Vec<(Vec<u8>, Option<V>)>, ViewError>
pub async fn multi_get_pairs( &self, short_keys: Vec<Vec<u8>>, ) -> Result<Vec<(Vec<u8>, Option<V>)>, ViewError>
Reads the key-value pairs at the given positions, if any.
let mut map = ByteMapView::load(context).await.unwrap();
map.insert(vec![0, 1], String::from("Hello"));
let pairs = map
.multi_get_pairs(vec![vec![0, 1], vec![0, 2]])
.await
.unwrap();
assert_eq!(
pairs,
vec![
(vec![0, 1], Some(String::from("Hello"))),
(vec![0, 2], None)
]
);Sourcepub async fn get_mut(
&mut self,
short_key: &[u8],
) -> Result<Option<&mut V>, ViewError>
pub async fn get_mut( &mut self, short_key: &[u8], ) -> Result<Option<&mut V>, ViewError>
Obtains a mutable reference to a value at a given position if available.
let mut map = ByteMapView::load(context).await.unwrap();
map.insert(vec![0, 1], String::from("Hello"));
let value = map.get_mut(&[0, 1]).await.unwrap().unwrap();
assert_eq!(*value, String::from("Hello"));
*value = String::from("Hola");
assert_eq!(map.get(&[0, 1]).await.unwrap(), Some(String::from("Hola")));Source§impl<C, V> ByteMapView<C, V>
impl<C, V> ByteMapView<C, V>
Sourcepub async fn for_each_key_while<F>(
&self,
f: F,
prefix: Vec<u8>,
) -> Result<(), ViewError>
pub async fn for_each_key_while<F>( &self, f: F, prefix: Vec<u8>, ) -> Result<(), ViewError>
Applies the function f on each index (aka key) which has the assigned prefix. Keys are visited in the lexicographic order. The shortened key is send to the function and if it returns false, then the loop exits
let mut map = ByteMapView::load(context).await.unwrap();
map.insert(vec![0, 1], String::from("Hello"));
map.insert(vec![1, 2], String::from("Bonjour"));
map.insert(vec![1, 3], String::from("Bonjour"));
let prefix = vec![1];
let mut count = 0;
map.for_each_key_while(
|_key| {
count += 1;
Ok(count < 3)
},
prefix,
)
.await
.unwrap();
assert_eq!(count, 2);Sourcepub async fn for_each_key<F>(
&self,
f: F,
prefix: Vec<u8>,
) -> Result<(), ViewError>
pub async fn for_each_key<F>( &self, f: F, prefix: Vec<u8>, ) -> Result<(), ViewError>
Applies the function f on each index (aka key) having the specified prefix. The shortened keys are sent to the function f. Keys are visited in the lexicographic order.
let mut map = ByteMapView::load(context).await.unwrap();
map.insert(vec![0, 1], String::from("Hello"));
let mut count = 0;
let prefix = Vec::new();
map.for_each_key(
|_key| {
count += 1;
Ok(())
},
prefix,
)
.await
.unwrap();
assert_eq!(count, 1);Sourcepub async fn keys(&self) -> Result<Vec<Vec<u8>>, ViewError>
pub async fn keys(&self) -> Result<Vec<Vec<u8>>, ViewError>
Returns the list of keys of the map in lexicographic order.
let mut map = ByteMapView::load(context).await.unwrap();
map.insert(vec![0, 1], String::from("Hello"));
map.insert(vec![1, 2], String::from("Bonjour"));
map.insert(vec![2, 2], String::from("Hallo"));
assert_eq!(
map.keys().await.unwrap(),
vec![vec![0, 1], vec![1, 2], vec![2, 2]]
);Sourcepub async fn keys_by_prefix(
&self,
prefix: Vec<u8>,
) -> Result<Vec<Vec<u8>>, ViewError>
pub async fn keys_by_prefix( &self, prefix: Vec<u8>, ) -> Result<Vec<Vec<u8>>, ViewError>
Returns the list of keys of the map having a specified prefix in lexicographic order.
let mut map = ByteMapView::load(context).await.unwrap();
map.insert(vec![0, 1], String::from("Hello"));
map.insert(vec![1, 2], String::from("Bonjour"));
map.insert(vec![1, 3], String::from("Hallo"));
assert_eq!(
map.keys_by_prefix(vec![1]).await.unwrap(),
vec![vec![1, 2], vec![1, 3]]
);Sourcepub async fn count(&self) -> Result<usize, ViewError>
pub async fn count(&self) -> Result<usize, ViewError>
Returns the number of keys of the map
let mut map = ByteMapView::load(context).await.unwrap();
map.insert(vec![0, 1], String::from("Hello"));
map.insert(vec![1, 2], String::from("Bonjour"));
map.insert(vec![2, 2], String::from("Hallo"));
assert_eq!(map.count().await.unwrap(), 3);Sourcepub async fn for_each_key_value_while<'a, F>(
&'a self,
f: F,
prefix: Vec<u8>,
) -> Result<(), ViewError>
pub async fn for_each_key_value_while<'a, F>( &'a self, f: F, prefix: Vec<u8>, ) -> Result<(), ViewError>
Applies a function f on each index/value pair matching a prefix. Keys and values are visited in the lexicographic order. The shortened index is send to the function f and if it returns false then the loop ends prematurely
let mut map = ByteMapView::load(context).await.unwrap();
map.insert(vec![0, 1], String::from("Hello"));
map.insert(vec![1, 2], String::from("Bonjour"));
map.insert(vec![1, 3], String::from("Hallo"));
let mut part_keys = Vec::new();
let prefix = vec![1];
map.for_each_key_value_while(
|key, _value| {
part_keys.push(key.to_vec());
Ok(part_keys.len() < 2)
},
prefix,
)
.await
.unwrap();
assert_eq!(part_keys.len(), 2);Sourcepub async fn for_each_key_value<'a, F>(
&'a self,
f: F,
prefix: Vec<u8>,
) -> Result<(), ViewError>
pub async fn for_each_key_value<'a, F>( &'a self, f: F, prefix: Vec<u8>, ) -> Result<(), ViewError>
Applies a function f on each key/value pair matching a prefix. The shortened key and value are send to the function f. Keys and values are visited in the lexicographic order.
let mut map = ByteMapView::load(context).await.unwrap();
map.insert(vec![0, 1], String::from("Hello"));
let mut count = 0;
let prefix = Vec::new();
map.for_each_key_value(
|_key, _value| {
count += 1;
Ok(())
},
prefix,
)
.await
.unwrap();
assert_eq!(count, 1);Source§impl<C, V> ByteMapView<C, V>
impl<C, V> ByteMapView<C, V>
Sourcepub async fn key_values_by_prefix(
&self,
prefix: Vec<u8>,
) -> Result<Vec<(Vec<u8>, V)>, ViewError>
pub async fn key_values_by_prefix( &self, prefix: Vec<u8>, ) -> Result<Vec<(Vec<u8>, V)>, ViewError>
Returns the list of keys and values of the map matching a prefix in lexicographic order.
let mut map = ByteMapView::load(context).await.unwrap();
map.insert(vec![1, 2], String::from("Hello"));
let prefix = vec![1];
assert_eq!(
map.key_values_by_prefix(prefix).await.unwrap(),
vec![(vec![1, 2], String::from("Hello"))]
);Sourcepub async fn key_values(&self) -> Result<Vec<(Vec<u8>, V)>, ViewError>
pub async fn key_values(&self) -> Result<Vec<(Vec<u8>, V)>, ViewError>
Returns the list of keys and values of the map in lexicographic order.
let mut map = ByteMapView::load(context).await.unwrap();
map.insert(vec![1, 2], String::from("Hello"));
assert_eq!(
map.key_values().await.unwrap(),
vec![(vec![1, 2], String::from("Hello"))]
);Source§impl<C, V> ByteMapView<C, V>
impl<C, V> ByteMapView<C, V>
Sourcepub async fn get_mut_or_default(
&mut self,
short_key: &[u8],
) -> Result<&mut V, ViewError>
pub async fn get_mut_or_default( &mut self, short_key: &[u8], ) -> Result<&mut V, ViewError>
Obtains a mutable reference to a value at a given position. Default value if the index is missing.
let mut map = ByteMapView::load(context).await.unwrap();
map.insert(vec![0, 1], String::from("Hello"));
assert_eq!(map.get_mut_or_default(&[7]).await.unwrap(), "");
let value = map.get_mut_or_default(&[0, 1]).await.unwrap();
assert_eq!(*value, String::from("Hello"));
*value = String::from("Hola");
assert_eq!(map.get(&[0, 1]).await.unwrap(), Some(String::from("Hola")));Trait Implementations§
Source§impl<C, V: Allocative> Allocative for ByteMapView<C, V>
impl<C, V: Allocative> Allocative for ByteMapView<C, V>
Source§impl<C: Clone, V: Clone> ClonableView for ByteMapView<C, V>where
Self: View,
impl<C: Clone, V: Clone> ClonableView for ByteMapView<C, V>where
Self: View,
Source§fn clone_unchecked(&mut self) -> Result<Self, ViewError>
fn clone_unchecked(&mut self) -> Result<Self, ViewError>
Source§impl<C, V> ContainerType for ByteMapView<C, V>
impl<C, V> ContainerType for ByteMapView<C, V>
Source§async fn resolve_field(&self, ctx: &Context<'_>) -> ServerResult<Option<Value>>
async fn resolve_field(&self, ctx: &Context<'_>) -> ServerResult<Option<Value>>
async_graphql::Value. Read moreSource§async fn find_entity(
&self,
ctx: &Context<'_>,
params: &Value,
) -> ServerResult<Option<Value>>
async fn find_entity( &self, ctx: &Context<'_>, params: &Value, ) -> ServerResult<Option<Value>>
Source§fn collect_all_fields<'a>(
&'a self,
ctx: &ContextBase<'a, &'a Positioned<SelectionSet>>,
fields: &mut Fields<'a>,
) -> Result<(), ServerError>
fn collect_all_fields<'a>( &'a self, ctx: &ContextBase<'a, &'a Positioned<SelectionSet>>, fields: &mut Fields<'a>, ) -> Result<(), ServerError>
Source§impl<C, V> HashableView for ByteMapView<C, V>
impl<C, V> HashableView for ByteMapView<C, V>
Source§impl<C, V> OutputType for ByteMapView<C, V>
impl<C, V> OutputType for ByteMapView<C, V>
Source§fn create_type_info(registry: &mut Registry) -> String
fn create_type_info(registry: &mut Registry) -> String
Source§async fn resolve(
&self,
ctx: &ContextSelectionSet<'_>,
_field: &Positioned<Field>,
) -> ServerResult<Value>
async fn resolve( &self, ctx: &ContextSelectionSet<'_>, _field: &Positioned<Field>, ) -> ServerResult<Value>
async_graphql::Value.Source§fn qualified_type_name() -> String
fn qualified_type_name() -> String
Source§impl<C: Context, C2: Context, V> ReplaceContext<C2> for ByteMapView<C, V>
impl<C: Context, C2: Context, V> ReplaceContext<C2> for ByteMapView<C, V>
Source§impl<C: Send + Sync, V: OutputType> TypeName for ByteMapView<C, V>
impl<C: Send + Sync, V: OutputType> TypeName for ByteMapView<C, V>
Source§impl<C, V> View for ByteMapView<C, V>
impl<C, V> View for ByteMapView<C, V>
Source§const NUM_INIT_KEYS: usize = 0usize
const NUM_INIT_KEYS: usize = 0usize
Source§fn pre_load(_context: &C) -> Result<Vec<Vec<u8>>, ViewError>
fn pre_load(_context: &C) -> Result<Vec<Vec<u8>>, ViewError>
Source§fn post_load(context: C, _values: &[Option<Vec<u8>>]) -> Result<Self, ViewError>
fn post_load(context: C, _values: &[Option<Vec<u8>>]) -> Result<Self, ViewError>
Source§fn rollback(&mut self)
fn rollback(&mut self)
flush should have no effect to storage.Source§async fn has_pending_changes(&self) -> bool
async fn has_pending_changes(&self) -> bool
true if flushing this view would result in changes to the persistent storage.Source§fn pre_save(&self, batch: &mut Batch) -> Result<bool, ViewError>
fn pre_save(&self, batch: &mut Batch) -> Result<bool, ViewError>
batch variable.
The returned boolean indicates whether the operation removes the view or not.Source§fn post_save(&mut self)
fn post_save(&mut self)
pre_save and after the batch has been successfully written to storage.
This leaves the view in a clean state with no pending changes. Read moreSource§fn clear(&mut self)
fn clear(&mut self)
impl<C, V> ObjectType for ByteMapView<C, V>
Auto Trait Implementations§
impl<C, V> Freeze for ByteMapView<C, V>where
C: Freeze,
impl<C, V> RefUnwindSafe for ByteMapView<C, V>where
C: RefUnwindSafe,
V: RefUnwindSafe,
impl<C, V> Send for ByteMapView<C, V>
impl<C, V> Sync for ByteMapView<C, V>
impl<C, V> Unpin for ByteMapView<C, V>where
C: Unpin,
impl<C, V> UnwindSafe for ByteMapView<C, V>where
C: UnwindSafe,
V: RefUnwindSafe,
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
Source§impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T> MockResults for T
impl<T> MockResults for T
Source§type Results = T
type Results = T
MockInstance.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<M, I> RuntimeMemory<&mut I> for Mwhere
M: RuntimeMemory<I>,
impl<M, I> RuntimeMemory<&mut I> for Mwhere
M: RuntimeMemory<I>,
Source§fn read<'instance>(
&self,
instance: &'instance &mut I,
location: GuestPointer,
length: u32,
) -> Result<Cow<'instance, [u8]>, RuntimeError>
fn read<'instance>( &self, instance: &'instance &mut I, location: GuestPointer, length: u32, ) -> Result<Cow<'instance, [u8]>, RuntimeError>
Reads length bytes from memory from the provided location.
Source§fn write(
&mut self,
instance: &mut &mut I,
location: GuestPointer,
bytes: &[u8],
) -> Result<(), RuntimeError>
fn write( &mut self, instance: &mut &mut I, location: GuestPointer, bytes: &[u8], ) -> Result<(), RuntimeError>
Writes the bytes to memory at the provided location.