Struct dharitri_wasm::storage::mappers::UserMapper
source · pub struct UserMapper<SA>{ /* private fields */ }Expand description
Very widely used mapper, that manages the users of a smart contract. It holds a bi-directional map, from addresses to ids and viceversa. This is so we can easily iterate over all users, using their ids. Also holds the user count in sync. This is also necessary for iteration.
This particular implementation of a user mapper doesn’t contain any additional user data other than address/id.
It also doesn’t allow removing users. Once in, their ids are reserved forever.
Implementations§
source§impl<SA> UserMapper<SA>
impl<SA> UserMapper<SA>
sourcepub fn get_user_id(&self, address: &ManagedAddress<SA>) -> usize
pub fn get_user_id(&self, address: &ManagedAddress<SA>) -> usize
Yields the user id for a given address. Will return 0 if the address is not known to the contract.
sourcepub fn get_user_address(&self, id: usize) -> Option<ManagedAddress<SA>>
pub fn get_user_address(&self, id: usize) -> Option<ManagedAddress<SA>>
Yields the user address for a given id, if the id is valid.
sourcepub fn get_user_address_unchecked(&self, id: usize) -> ManagedAddress<SA>
pub fn get_user_address_unchecked(&self, id: usize) -> ManagedAddress<SA>
Yields the user address for a given id. Will cause a deserialization error if the id is invalid.
sourcepub fn get_user_address_or_zero(&self, id: usize) -> ManagedAddress<SA>
pub fn get_user_address_or_zero(&self, id: usize) -> ManagedAddress<SA>
Yields the user address for a given id, if the id is valid. Otherwise returns the zero address (0x000…)
sourcepub fn get_user_count(&self) -> usize
pub fn get_user_count(&self) -> usize
Number of users.
sourcepub fn get_or_create_user(&self, address: &ManagedAddress<SA>) -> usize
pub fn get_or_create_user(&self, address: &ManagedAddress<SA>) -> usize
Yields the user id for a given address, or creates a new user id if there isn’t one. Will safely keep the user count in sync.
sourcepub fn get_or_create_users<AddressIter, F>(
&self,
address_iter: AddressIter,
user_id_lambda: F
)
pub fn get_or_create_users<AddressIter, F>( &self, address_iter: AddressIter, user_id_lambda: F )
Tries to insert a number of addresses. Calls a lambda function for each, with the new user id and whether of nor the user was already present.
sourcepub fn get_all_addresses(&self) -> ManagedVec<SA, ManagedAddress<SA>>
pub fn get_all_addresses(&self) -> ManagedVec<SA, ManagedAddress<SA>>
Loads all addresses from storage and places them in a ManagedVec. Can easily consume a lot of gas.
Trait Implementations§
source§impl<SA> EndpointResult for UserMapper<SA>
impl<SA> EndpointResult for UserMapper<SA>
Behaves like a MultiResultVec
when an endpoint result, and lists all users addresses.§type DecodeAs = MultiArgVec<ManagedAddress<SA>>
type DecodeAs = MultiArgVec<ManagedAddress<SA>>
Self for most types.fn finish<FA>(&self, api: FA)
source§impl<SA> StorageMapper<SA> for UserMapper<SA>
impl<SA> StorageMapper<SA> for UserMapper<SA>
source§fn new(api: SA, base_key: StorageKey<SA>) -> Self
fn new(api: SA, base_key: StorageKey<SA>) -> Self
#[storage_mapper] annotation generated code.source§impl<SA> TypeAbi for UserMapper<SA>
impl<SA> TypeAbi for UserMapper<SA>
Behaves like a MultiResultVec when an endpoint result.