Struct CustomMapView

Source
pub struct CustomMapView<C, I, V> { /* private fields */ }
Expand description

A map view that uses custom serialization

Implementations§

Source§

impl<C: Context, I: CustomSerialize, V> CustomMapView<C, I, V>

Source

pub fn insert<Q>(&mut self, index: &Q, value: V) -> Result<(), ViewError>
where I: Borrow<Q>, Q: Serialize + CustomSerialize,

Insert or resets a value.

let mut map: MapView<_, u128, _> = MapView::load(context).await.unwrap();
map.insert(&(24 as u128), String::from("Hello"));
assert_eq!(
    map.get(&(24 as u128)).await.unwrap(),
    Some(String::from("Hello"))
);
Source

pub fn remove<Q>(&mut self, index: &Q) -> Result<(), ViewError>
where I: Borrow<Q>, Q: Serialize + CustomSerialize,

Removes a value. If absent then this does not do anything.

let mut map = MapView::<_, u128, String>::load(context).await.unwrap();
map.remove(&(37 as u128));
assert_eq!(map.get(&(37 as u128)).await.unwrap(), None);
Source

pub fn extra(&self) -> &C::Extra

Obtains the extra data.

Source

pub async fn contains_key<Q>(&self, index: &Q) -> Result<bool, ViewError>
where I: Borrow<Q>, Q: Serialize + ?Sized,

Returns true if the map contains a value for the specified key.

let mut map = MapView::<_, u128, String>::load(context).await.unwrap();
map.insert(&(37 as u128), String::from("Hello"));
assert!(map.contains_key(&(37 as u128)).await.unwrap());
assert!(!map.contains_key(&(34 as u128)).await.unwrap());
Source§

impl<C, I, V> CustomMapView<C, I, V>
where C: Context, I: CustomSerialize, V: Clone + DeserializeOwned + 'static,

Source

pub async fn get<Q>(&self, index: &Q) -> Result<Option<V>, ViewError>
where I: Borrow<Q>, Q: CustomSerialize,

Reads the value at the given position, if any.

let mut map: CustomMapView<MemoryContext<()>, u128, String> =
    CustomMapView::load(context).await.unwrap();
map.insert(&(34 as u128), String::from("Hello"));
assert_eq!(
    map.get(&(34 as u128)).await.unwrap(),
    Some(String::from("Hello"))
);
Source

pub async fn multi_get<'a, Q>( &self, indices: impl IntoIterator<Item = &'a Q>, ) -> Result<Vec<Option<V>>, ViewError>
where I: Borrow<Q>, Q: CustomSerialize + 'a,

Read values at several positions, if any.

let mut map: CustomMapView<MemoryContext<()>, u128, String> =
    CustomMapView::load(context).await.unwrap();
map.insert(&(34 as u128), String::from("Hello"));
map.insert(&(12 as u128), String::from("Hi"));
assert_eq!(
    map.multi_get(&[34 as u128, 12 as u128, 89 as u128])
        .await
        .unwrap(),
    [Some(String::from("Hello")), Some(String::from("Hi")), None]
);
Source

pub async fn multi_get_pairs<Q>( &self, indices: impl IntoIterator<Item = Q>, ) -> Result<Vec<(Q, Option<V>)>, ViewError>
where I: Borrow<Q>, Q: CustomSerialize + Clone,

Read index-value pairs at several positions, if any.

let mut map: CustomMapView<MemoryContext<()>, u128, String> =
    CustomMapView::load(context).await.unwrap();
map.insert(&(34 as u128), String::from("Hello"));
map.insert(&(12 as u128), String::from("Hi"));
assert_eq!(
    map.multi_get_pairs([34 as u128, 12 as u128, 89 as u128])
        .await
        .unwrap(),
    vec![
        (34 as u128, Some(String::from("Hello"))),
        (12 as u128, Some(String::from("Hi"))),
        (89 as u128, None)
    ]
);
Source

pub async fn get_mut<Q>( &mut self, index: &Q, ) -> Result<Option<&mut V>, ViewError>
where I: Borrow<Q>, Q: CustomSerialize,

Obtains a mutable reference to a value at a given position if available

let mut map: CustomMapView<_, u128, String> = CustomMapView::load(context).await.unwrap();
map.insert(&(34 as u128), String::from("Hello"));
let value = map.get_mut(&(34 as u128)).await.unwrap().unwrap();
*value = String::from("Hola");
assert_eq!(
    map.get(&(34 as u128)).await.unwrap(),
    Some(String::from("Hola"))
);
Source§

impl<C, I, V> CustomMapView<C, I, V>
where C: Context, I: Send + CustomSerialize, V: Clone + Serialize + DeserializeOwned + 'static,

Source

pub async fn indices(&self) -> Result<Vec<I>, ViewError>

Returns the list of indices in the map. The order is determined by the custom serialization.

let mut map: MapView<_, u128, String> = MapView::load(context).await.unwrap();
map.insert(&(34 as u128), String::from("Hello"));
map.insert(&(37 as u128), String::from("Bonjour"));
assert_eq!(map.indices().await.unwrap(), vec![34 as u128, 37 as u128]);
Source

pub async fn for_each_index_while<F>(&self, f: F) -> Result<(), ViewError>
where F: FnMut(I) -> Result<bool, ViewError> + Send,

Applies a function f on each index. Indices are visited in an order determined by the custom serialization. If the function returns false, then the loop ends prematurely.

let mut map = CustomMapView::load(context).await.unwrap();
map.insert(&(34 as u128), String::from("Hello"));
map.insert(&(37 as u128), String::from("Hola"));
let mut indices = Vec::<u128>::new();
map.for_each_index_while(|index| {
    indices.push(index);
    Ok(indices.len() < 5)
})
.await
.unwrap();
assert_eq!(indices.len(), 2);
Source

pub async fn for_each_index<F>(&self, f: F) -> Result<(), ViewError>
where F: FnMut(I) -> Result<(), ViewError> + Send,

Applies a function f on each index. Indices are visited in an order determined by the custom serialization.

let mut map = CustomMapView::load(context).await.unwrap();
map.insert(&(34 as u128), String::from("Hello"));
map.insert(&(37 as u128), String::from("Hola"));
let mut indices = Vec::<u128>::new();
map.for_each_index(|index| {
    indices.push(index);
    Ok(())
})
.await
.unwrap();
assert_eq!(indices, vec![34, 37]);
Source

pub async fn for_each_index_value_while<'a, F>( &'a self, f: F, ) -> Result<(), ViewError>
where F: FnMut(I, Cow<'a, V>) -> Result<bool, ViewError> + Send,

Applies a function f on the index/value pairs. Indices and values are visited in an order determined by the custom serialization. If the function returns false, then the loop ends prematurely.

let mut map = CustomMapView::<_, u128, String>::load(context)
    .await
    .unwrap();
map.insert(&(34 as u128), String::from("Hello"));
map.insert(&(37 as u128), String::from("Hola"));
let mut values = Vec::new();
map.for_each_index_value_while(|_index, value| {
    values.push(value);
    Ok(values.len() < 5)
})
.await
.unwrap();
assert_eq!(values.len(), 2);
Source

pub async fn for_each_index_value<'a, F>( &'a self, f: F, ) -> Result<(), ViewError>
where F: FnMut(I, Cow<'a, V>) -> Result<(), ViewError> + Send,

Applies a function f on each index/value pair. Indices and values are visited in an order determined by the custom serialization.

let mut map: CustomMapView<_, u128, String> = CustomMapView::load(context).await.unwrap();
map.insert(&(34 as u128), String::from("Hello"));
map.insert(&(37 as u128), String::from("Hola"));
let mut indices = Vec::<u128>::new();
map.for_each_index_value(|index, _value| {
    indices.push(index);
    Ok(())
})
.await
.unwrap();
assert_eq!(indices, vec![34, 37]);
Source§

impl<C, I, V> CustomMapView<C, I, V>
where C: Context, I: Send + CustomSerialize, V: Clone + Sync + Send + Serialize + DeserializeOwned + 'static,

Source

pub async fn index_values(&self) -> Result<Vec<(I, V)>, ViewError>

Obtains all the (index,value) pairs.

let mut map: MapView<_, String, _> = MapView::load(context).await.unwrap();
map.insert("Italian", String::from("Ciao"));
let index_values = map.index_values().await.unwrap();
assert_eq!(
    index_values,
    vec![("Italian".to_string(), "Ciao".to_string())]
);
Source

pub async fn count(&self) -> Result<usize, ViewError>

Obtains the number of entries in the map

let mut map: MapView<_, String, _> = MapView::load(context).await.unwrap();
map.insert("Italian", String::from("Ciao"));
map.insert("French", String::from("Bonjour"));
assert_eq!(map.count().await.unwrap(), 2);
Source§

impl<C, I, V> CustomMapView<C, I, V>
where C: Context, I: CustomSerialize, V: Default + DeserializeOwned + 'static,

Source

pub async fn get_mut_or_default<Q>( &mut self, index: &Q, ) -> Result<&mut V, ViewError>
where I: Borrow<Q>, Q: Send + CustomSerialize,

Obtains a mutable reference to a value at a given position. Default value if the index is missing.

let mut map: CustomMapView<_, u128, String> = CustomMapView::load(context).await.unwrap();
assert_eq!(
    *map.get_mut_or_default(&(34 as u128)).await.unwrap(),
    String::new()
);

Trait Implementations§

Source§

impl<C, I, V: Allocative> Allocative for CustomMapView<C, I, V>

Source§

fn visit<'allocative_a, 'allocative_b: 'allocative_a>( &self, visitor: &'allocative_a mut Visitor<'allocative_b>, )

Source§

impl<C, I, V> ClonableView for CustomMapView<C, I, V>
where Self: View, ByteMapView<C, V>: ClonableView,

Source§

fn clone_unchecked(&mut self) -> Result<Self, ViewError>

Creates a clone of this view, sharing the underlying storage context but prone to data races which can corrupt the view state.
Source§

impl<C, I, V> ContainerType for CustomMapView<C, I, V>
where C: Context, I: OutputType + InputType + CustomSerialize + Debug + Clone + Send + Sync + 'static, V: OutputType + Serialize + DeserializeOwned + Clone + Send + Sync + 'static,

Source§

async fn resolve_field(&self, ctx: &Context<'_>) -> ServerResult<Option<Value>>

Resolves a field value and outputs it as a json value async_graphql::Value. Read more
Source§

async fn find_entity( &self, ctx: &Context<'_>, params: &Value, ) -> ServerResult<Option<Value>>

Find the GraphQL entity with the given name from the parameter. Read more
Source§

fn collect_all_fields<'a>( &'a self, ctx: &ContextBase<'a, &'a Positioned<SelectionSet>>, fields: &mut Fields<'a>, ) -> Result<(), ServerError>
where Self: Send + Sync,

Collect all the fields of the container that are queried in the selection set. Read more
Source§

impl<C: Debug, I: Debug, V: Debug> Debug for CustomMapView<C, I, V>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<C, I, V> HashableView for CustomMapView<C, I, V>
where C: Context, I: Send + Sync + CustomSerialize, V: Clone + Send + Sync + Serialize + DeserializeOwned + 'static,

Source§

type Hasher = CoreWrapper<Sha3_256Core>

How to compute hashes.
Source§

async fn hash_mut( &mut self, ) -> Result<<Self::Hasher as Hasher>::Output, ViewError>

Same as hash but guaranteed to be wait-free.
Source§

async fn hash(&self) -> Result<<Self::Hasher as Hasher>::Output, ViewError>

Computes the hash of the values. Read more
Source§

impl<C, I, V> OutputType for CustomMapView<C, I, V>
where C: Context, I: OutputType + InputType + CustomSerialize + Debug + Clone + Send + Sync + 'static, V: OutputType + Serialize + DeserializeOwned + Clone + Send + Sync + 'static,

Source§

fn type_name() -> Cow<'static, str>

Type the name.
Source§

fn create_type_info(registry: &mut Registry) -> String

Create type information in the registry and return qualified typename.
Source§

async fn resolve( &self, ctx: &ContextSelectionSet<'_>, _field: &Positioned<Field>, ) -> ServerResult<Value>

Resolve an output value to async_graphql::Value.
Source§

fn qualified_type_name() -> String

Qualified typename.
Source§

fn introspection_type_name(&self) -> Cow<'static, str>

Introspection type name Read more
Source§

impl<C: Send + Sync, I: OutputType, V: OutputType> TypeName for CustomMapView<C, I, V>

Source§

fn type_name() -> Cow<'static, str>

Returns a GraphQL type name.
Source§

impl<C, I, V> View for CustomMapView<C, I, V>
where C: Context, I: CustomSerialize + Send + Sync, V: Serialize + Clone + Send + Sync,

Source§

const NUM_INIT_KEYS: usize = 0usize

The number of keys used for the initialization
Source§

type Context = C

The type of context stored in this view
Source§

fn context(&self) -> C

Obtains a mutable reference to the internal context.
Source§

fn pre_load(context: &C) -> Result<Vec<Vec<u8>>, ViewError>

Creates the keys needed for loading the view
Source§

fn post_load(context: C, values: &[Option<Vec<u8>>]) -> Result<Self, ViewError>

Loads a view from the values
Source§

fn rollback(&mut self)

Discards all pending changes. After that flush should have no effect to storage.
Source§

async fn has_pending_changes(&self) -> bool

Returns true if flushing this view would result in changes to the persistent storage.
Source§

fn pre_save(&self, batch: &mut Batch) -> Result<bool, ViewError>

Computes the batch of operations to persist changes to storage without modifying the view. Crash-resistant storage implementations accumulate the desired changes in the batch variable. The returned boolean indicates whether the operation removes the view or not.
Source§

fn post_save(&mut self)

Updates the view state after the batch has been executed in the database. This should be called after 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 more
Source§

fn clear(&mut self)

Clears the view. That can be seen as resetting to default. If the clear is followed by a flush then all the relevant data is removed on the storage.
Source§

fn load( context: Self::Context, ) -> impl Future<Output = Result<Self, ViewError>> + Send + Sync

Loads a view
Source§

fn new(context: Self::Context) -> Result<Self, ViewError>

Builds a trivial view that is already deleted
Source§

impl<C, I, V> ObjectType for CustomMapView<C, I, V>
where C: Context, I: OutputType + InputType + CustomSerialize + Debug + Clone + Send + Sync + 'static, V: OutputType + Serialize + DeserializeOwned + Clone + Send + Sync + 'static,

Auto Trait Implementations§

§

impl<C, I, V> Freeze for CustomMapView<C, I, V>
where C: Freeze,

§

impl<C, I, V> RefUnwindSafe for CustomMapView<C, I, V>

§

impl<C, I, V> Send for CustomMapView<C, I, V>
where C: Send, I: Send, V: Send,

§

impl<C, I, V> Sync for CustomMapView<C, I, V>
where C: Sync, I: Sync, V: Sync,

§

impl<C, I, V> Unpin for CustomMapView<C, I, V>
where C: Unpin, I: Unpin,

§

impl<C, I, V> UnwindSafe for CustomMapView<C, I, V>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> ArchivePointee for T

Source§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
Source§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<Choices> CoproductSubsetter<CNil, HNil> for Choices

Source§

type Remainder = Choices

Source§

fn subset( self, ) -> Result<CNil, <Choices as CoproductSubsetter<CNil, HNil>>::Remainder>

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more
Source§

impl<F, W, T, D> Deserialize<With<T, W>, D> for F
where W: DeserializeWith<F, T, D>, D: Fallible + ?Sized, F: ?Sized,

Source§

fn deserialize( &self, deserializer: &mut D, ) -> Result<With<T, W>, <D as Fallible>::Error>

Deserializes using the given deserializer
Source§

impl<To, From> DynInto<To> for From
where From: Into<To>,

Source§

fn into_box(self: Box<From>) -> To

Converts a boxed object into the target type.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

Source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
Source§

impl<T> LayoutRaw for T

Source§

fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>

Gets the layout of the type.
Source§

impl<T, U, I> LiftInto<U, I> for T
where U: LiftFrom<T, I>,

Source§

fn lift_into(self) -> U

Performs the indexed conversion.
Source§

impl<T> MockResults for T

Source§

type Results = T

The mock native type of the results for the MockInstance.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Pointee for T

Source§

type Metadata = ()

The type for metadata in pointers and references to Self.
Source§

impl<M, I> RuntimeMemory<&mut I> for M
where M: RuntimeMemory<I>,

Source§

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>

Writes the bytes to memory at the provided location.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<Source> Sculptor<HNil, HNil> for Source

Source§

type Remainder = Source

Source§

fn sculpt(self) -> (HNil, <Source as Sculptor<HNil, HNil>>::Remainder)

Consumes the current HList and returns an HList with the requested shape. Read more
Source§

impl<AnyTail> Split<HNil> for AnyTail

Source§

type Remainder = AnyTail

The tail of remaining elements after splitting up the list.
Source§

fn split(self) -> (HNil, <AnyTail as Split<HNil>>::Remainder)

Splits the current heterogeneous list in two.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> Upcastable for T
where T: Any + Send + Sync + 'static,

Source§

fn upcast_any_ref(&self) -> &(dyn Any + 'static)

upcast ref
Source§

fn upcast_any_mut(&mut self) -> &mut (dyn Any + 'static)

upcast mut ref
Source§

fn upcast_any_box(self: Box<T>) -> Box<dyn Any>

upcast boxed dyn
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<_INNER> AutoTraits for _INNER
where _INNER: Send + Sync + 'static,

Source§

impl<T> ErasedDestructor for T
where T: 'static,