Struct cw_storage_plus::UniqueIndex
source · pub struct UniqueIndex<'a, IK, T, PK = ()> { /* private fields */ }
Expand description
UniqueIndex stores (namespace, index_name, idx_value) -> {key, value} Allows one value per index (i.e. unique) and copies pk and data The optional PK type defines the type of Primary Key deserialization.
Implementations§
source§impl<'a, IK, T, PK> UniqueIndex<'a, IK, T, PK>
impl<'a, IK, T, PK> UniqueIndex<'a, IK, T, PK>
sourcepub const fn new(idx_fn: fn(_: &T) -> IK, idx_namespace: &'a str) -> Self
pub const fn new(idx_fn: fn(_: &T) -> IK, idx_namespace: &'a str) -> Self
Create a new UniqueIndex
idx_fn - lambda creating index key from index value idx_namespace - prefix for the index value
Example:
use cw_storage_plus::UniqueIndex;
struct Data {
pub name: String,
pub age: u32,
}
UniqueIndex::<_, _, ()>::new(|d: &Data| d.age, "data__age");
source§impl<'a, IK, T, PK> UniqueIndex<'a, IK, T, PK>where
T: Serialize + DeserializeOwned + Clone,
IK: PrimaryKey<'a>,
impl<'a, IK, T, PK> UniqueIndex<'a, IK, T, PK>where T: Serialize + DeserializeOwned + Clone, IK: PrimaryKey<'a>,
source§impl<'a, IK, T, PK> UniqueIndex<'a, IK, T, PK>where
T: Serialize + DeserializeOwned + Clone,
IK: PrimaryKey<'a>,
impl<'a, IK, T, PK> UniqueIndex<'a, IK, T, PK>where T: Serialize + DeserializeOwned + Clone, IK: PrimaryKey<'a>,
pub fn range_raw<'c>( &self, store: &'c dyn Storage, min: Option<Bound<'a, IK>>, max: Option<Bound<'a, IK>>, order: Order ) -> Box<dyn Iterator<Item = StdResult<Record<T>>> + 'c>where T: 'c,
pub fn keys_raw<'c>( &self, store: &'c dyn Storage, min: Option<Bound<'a, IK>>, max: Option<Bound<'a, IK>>, order: Order ) -> Box<dyn Iterator<Item = Vec<u8>> + 'c>
source§impl<'a, IK, T, PK> UniqueIndex<'a, IK, T, PK>where
PK: PrimaryKey<'a> + KeyDeserialize,
T: Serialize + DeserializeOwned + Clone,
IK: PrimaryKey<'a>,
impl<'a, IK, T, PK> UniqueIndex<'a, IK, T, PK>where PK: PrimaryKey<'a> + KeyDeserialize, T: Serialize + DeserializeOwned + Clone, IK: PrimaryKey<'a>,
sourcepub fn prefix_range<'c>(
&self,
store: &'c dyn Storage,
min: Option<PrefixBound<'a, IK::Prefix>>,
max: Option<PrefixBound<'a, IK::Prefix>>,
order: Order
) -> Box<dyn Iterator<Item = StdResult<(PK::Output, T)>> + 'c>where
T: 'c,
IK: 'c,
PK: 'c,
PK::Output: 'static,
'a: 'c,
pub fn prefix_range<'c>( &self, store: &'c dyn Storage, min: Option<PrefixBound<'a, IK::Prefix>>, max: Option<PrefixBound<'a, IK::Prefix>>, order: Order ) -> Box<dyn Iterator<Item = StdResult<(PK::Output, T)>> + 'c>where T: 'c, IK: 'c, PK: 'c, PK::Output: 'static, 'a: 'c,
While range
over a prefix
fixes the prefix to one element and iterates over the
remaining, prefix_range
accepts bounds for the lowest and highest elements of the
Prefix
itself, and iterates over those (inclusively or exclusively, depending on
PrefixBound
).
There are some issues that distinguish these two, and blindly casting to Vec<u8>
doesn’t
solve them.
pub fn range<'c>( &self, store: &'c dyn Storage, min: Option<Bound<'a, IK>>, max: Option<Bound<'a, IK>>, order: Order ) -> Box<dyn Iterator<Item = StdResult<(PK::Output, T)>> + 'c>where T: 'c, PK::Output: 'static,
pub fn keys<'c>( &self, store: &'c dyn Storage, min: Option<Bound<'a, IK>>, max: Option<Bound<'a, IK>>, order: Order ) -> Box<dyn Iterator<Item = StdResult<PK::Output>> + 'c>where T: 'c, PK::Output: 'static,
pub fn prefix(&self, p: IK::Prefix) -> Prefix<PK, T, IK::Suffix>
pub fn sub_prefix(&self, p: IK::SubPrefix) -> Prefix<PK, T, IK::SuperSuffix>
Trait Implementations§
source§impl<'a, IK, T, PK> Index<T> for UniqueIndex<'a, IK, T, PK>where
T: Serialize + DeserializeOwned + Clone,
IK: PrimaryKey<'a>,
impl<'a, IK, T, PK> Index<T> for UniqueIndex<'a, IK, T, PK>where T: Serialize + DeserializeOwned + Clone, IK: PrimaryKey<'a>,
Auto Trait Implementations§
impl<'a, IK, T, PK> RefUnwindSafe for UniqueIndex<'a, IK, T, PK>where IK: RefUnwindSafe, PK: RefUnwindSafe, T: RefUnwindSafe,
impl<'a, IK, T, PK> Send for UniqueIndex<'a, IK, T, PK>where IK: Send, PK: Send, T: Send,
impl<'a, IK, T, PK> Sync for UniqueIndex<'a, IK, T, PK>where IK: Sync, PK: Sync, T: Sync,
impl<'a, IK, T, PK> Unpin for UniqueIndex<'a, IK, T, PK>where IK: Unpin, PK: Unpin, T: Unpin,
impl<'a, IK, T, PK> UnwindSafe for UniqueIndex<'a, IK, T, PK>where IK: UnwindSafe, PK: UnwindSafe, T: UnwindSafe,
Blanket Implementations§
§impl<U> As for U
impl<U> As for U
§fn as_<T>(self) -> Twhere
T: CastFrom<U>,
fn as_<T>(self) -> Twhere T: CastFrom<U>,
Casts
self
to type T
. The semantics of numeric casting with the as
operator are followed, so <T as As>::as_::<U>
can be used in the same way as T as U
for numeric conversions. Read moresource§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
Mutably borrows from an owned value. Read more