Module substreams::key

source ·
Expand description

The key module contains functions for working extracting segments from key.

In a lot of use cases, you will encode data into your keys into segmented parts, adding a prefix as namespace for example user and <address> joined together using a separator. The key module expects keys to use the : segment separator so keys looks like <segment>[:<segment>]*. Concrete examples are user:0x1234 or user:0x1234:balance.

You can extract various parts from a key:

use substreams::key;
use substreams::store::{Delta, Deltas, DeltaBigDecimal};

fn db_out(deltas: Deltas<DeltaBigDecimal>) {
    for delta in deltas.into_iter() {
        let kind = key::first_segment(delta.get_key());
        let address = key::segment_at(delta.get_key(), 1);
        // Do something for this kind and address
    }
}

Those method panics if the key is not properly formatted or refering an invalid part. Use the try_ version if you want to handle errors:

use substreams::key;
use substreams::store::{Delta, Deltas, DeltaBigDecimal};

fn db_out(deltas: Deltas<DeltaBigDecimal>) {
    for delta in deltas.into_iter() {
        let kind = key::try_first_segment(delta.get_key()).expect("invalid key: kind");
        let address = key::try_segment_at(delta.get_key(), 1).expect("invalid key: address");
        // Do something for this kind and address
    }
}

Structs§

Functions§