Trait cosmwasm_std::Storage

source ·
pub trait Storage {
    // Required methods
    fn get(&self, key: &[u8]) -> Option<Vec<u8>>;
    fn range<'a>(
        &'a self,
        start: Option<&[u8]>,
        end: Option<&[u8]>,
        order: Order
    ) -> Box<dyn Iterator<Item = Record> + 'a>;
    fn set(&mut self, key: &[u8], value: &[u8]);
    fn remove(&mut self, key: &[u8]);

    // Provided methods
    fn range_keys<'a>(
        &'a self,
        start: Option<&[u8]>,
        end: Option<&[u8]>,
        order: Order
    ) -> Box<dyn Iterator<Item = Vec<u8>> + 'a> { ... }
    fn range_values<'a>(
        &'a self,
        start: Option<&[u8]>,
        end: Option<&[u8]>,
        order: Order
    ) -> Box<dyn Iterator<Item = Vec<u8>> + 'a> { ... }
}
Expand description

Storage provides read and write access to a persistent storage. If you only want to provide read access, provide &Storage

Required Methods§

source

fn get(&self, key: &[u8]) -> Option<Vec<u8>>

Returns None when key does not exist. Returns Some(Vec) when key exists.

Note: Support for differentiating between a non-existent key and a key with empty value is not great yet and might not be possible in all backends. But we’re trying to get there.

source

fn range<'a>( &'a self, start: Option<&[u8]>, end: Option<&[u8]>, order: Order ) -> Box<dyn Iterator<Item = Record> + 'a>

Allows iteration over a set of key/value pairs, either forwards or backwards.

The bound start is inclusive and end is exclusive. If start is lexicographically greater than or equal to end, an empty range is described, mo matter of the order.

source

fn set(&mut self, key: &[u8], value: &[u8])

source

fn remove(&mut self, key: &[u8])

Removes a database entry at key.

The current interface does not allow to differentiate between a key that existed before and one that didn’t exist. See https://github.com/CosmWasm/cosmwasm/issues/290

Provided Methods§

source

fn range_keys<'a>( &'a self, start: Option<&[u8]>, end: Option<&[u8]>, order: Order ) -> Box<dyn Iterator<Item = Vec<u8>> + 'a>

Allows iteration over a set of keys, either forwards or backwards.

The bound start is inclusive and end is exclusive. If start is lexicographically greater than or equal to end, an empty range is described, mo matter of the order.

The default implementation uses Storage::range and discards the values. More efficient implementations might be possible depending on the storage.

source

fn range_values<'a>( &'a self, start: Option<&[u8]>, end: Option<&[u8]>, order: Order ) -> Box<dyn Iterator<Item = Vec<u8>> + 'a>

Allows iteration over a set of values, either forwards or backwards.

The bound start is inclusive and end is exclusive. If start is lexicographically greater than or equal to end, an empty range is described, mo matter of the order.

The default implementation uses Storage::range and discards the keys. More efficient implementations might be possible depending on the storage.

Implementors§