Struct linera_views::views::map_view::ByteMapView
source · 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>
impl<C, V> ByteMapView<C, V>
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 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> ClonableView<C> for ByteMapView<C, V>
impl<C, V> ClonableView<C> for ByteMapView<C, V>
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>where
C: Context + Send + Sync,
V: OutputType + Serialize + DeserializeOwned + Clone + Send + Sync + 'static,
impl<C, V> ContainerType for ByteMapView<C, V>where
C: Context + Send + Sync,
V: OutputType + Serialize + DeserializeOwned + Clone + Send + Sync + 'static,
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<C> for ByteMapView<C, V>
impl<C, V> HashableView<C> for ByteMapView<C, V>
§type Hasher = CoreWrapper<Sha3_256Core>
type Hasher = CoreWrapper<Sha3_256Core>
source§impl<C, V> OutputType for ByteMapView<C, V>where
C: Context + Send + Sync,
V: OutputType + Serialize + DeserializeOwned + Clone + Send + Sync + 'static,
impl<C, V> OutputType for ByteMapView<C, V>where
C: Context + Send + Sync,
V: OutputType + Serialize + DeserializeOwned + Clone + Send + Sync + 'static,
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: 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<C> for ByteMapView<C, V>
impl<C, V> View<C> 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 load<'async_trait>(
context: C,
) -> Pin<Box<dyn Future<Output = Result<Self, ViewError>> + Send + 'async_trait>>where
Self: 'async_trait,
fn load<'async_trait>(
context: C,
) -> Pin<Box<dyn Future<Output = Result<Self, ViewError>> + Send + 'async_trait>>where
Self: 'async_trait,
source§fn rollback(&mut self)
fn rollback(&mut self)
flush
should have no effect to storage.source§fn has_pending_changes<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn has_pending_changes<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
true
if flushing this view would result in changes to the persistent storage.source§fn flush(&mut self, batch: &mut Batch) -> Result<bool, ViewError>
fn flush(&mut self, batch: &mut Batch) -> Result<bool, ViewError>
batch
variable first. If the view is dropped without calling flush
, staged
changes are simply lost.
The returned boolean indicates whether the operation removes the view or not.impl<C, V> ObjectType for ByteMapView<C, V>where
C: Context + Send + Sync,
V: OutputType + Serialize + DeserializeOwned + Clone + Send + Sync + 'static,
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
§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
§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
.