substreams 0.0.10-beta

Substreams SDK - A streaming data engine for The Graph - by StreamingFast
Documentation
use crate::externs;
use crate::memory;
use num_bigint::{BigInt};
use bigdecimal::BigDecimal;

pub fn get_at(store_idx: u32, ord: i64, key: &String) -> Option<Vec<u8>> {
    unsafe {
        let key_bytes = key.as_bytes();
        let output_ptr = memory::alloc(8);
        let found = externs::state::get_at(
            store_idx,
            ord,
            key_bytes.as_ptr(),
            key_bytes.len() as u32,
            output_ptr as u32,
        );
        return if found == 1 {
            Some(memory::get_output_data(output_ptr))
        } else {
            None
        };
    }
}
pub fn get_last(store_idx: u32, key: &String) -> Option<Vec<u8>> {
    unsafe {
        let key_bytes = key.as_bytes();
        let output_ptr = memory::alloc(8);
        let found = externs::state::get_last(
            store_idx,
            key_bytes.as_ptr(),
            key_bytes.len() as u32,
            output_ptr as u32,
        );

        return if found == 1 {
            Some(memory::get_output_data(output_ptr))
        } else {
            None
        };
    }
}
pub fn get_first(store_idx: u32, key: &String) -> Option<Vec<u8>> {
    unsafe {
        let key_bytes = key.as_bytes();
        let output_ptr = memory::alloc(8);
        let found = externs::state::get_first(
            store_idx,
            key_bytes.as_ptr(),
            key_bytes.len() as u32,
            output_ptr as u32,
        );

        return if found == 1 {
            Some(memory::get_output_data(output_ptr))
        } else {
            None
        };
    }
}
pub fn set(ord: i64, key: String, value: &Vec<u8>) {
    unsafe {
        externs::state::set(
            ord,
            key.as_ptr(),
            key.len() as u32,
            value.as_ptr(),
            value.len() as u32,
        )
    }
}
pub fn set_if_not_exists(ord: i64, key: String, value: &Vec<u8>) {
    unsafe {
        externs::state::set_if_not_exists(
            ord,
            key.as_ptr(),
            key.len() as u32,
            value.as_ptr(),
            value.len() as u32,
        )
    }
}

pub fn delete_prefix(ord: i64, prefix: &String){
    unsafe {
        externs::state::delete_prefix(
            ord,
            prefix.as_ptr(),
            prefix.len() as u32,
        )
    }
}
pub fn add_bigint(ord: i64, key: String, value: &BigInt) {
    let data = value.to_string();
    unsafe {
        externs::state::add_bigint(
            ord,
            key.as_ptr(),
            key.len() as u32,
            data.as_ptr(),
            data.len() as u32,
        )
    }
}
pub fn add_int64(ord: i64, key: String, value: i64) {
    unsafe {
        externs::state::add_int64(
            ord,
            key.as_ptr(),
            key.len() as u32,
	        value,
        )
    }
}
pub fn add_float64(ord: i64, key: String, value: f64) {
    unsafe {
        externs::state::add_float64(
            ord,
            key.as_ptr(),
            key.len() as u32,
            value
        )
    }
}
pub fn add_bigfloat(ord: i64, key: String, value: &BigDecimal) {
    let data = value.to_string();
    unsafe {
        externs::state::add_bigfloat(
            ord,
            key.as_ptr(),
            key.len() as u32,
            data.as_ptr(),
            data.len() as u32,
        )
    }
}
pub fn set_min_int64(ord: i64, key: String, value: i64) {
    unsafe {
        externs::state::set_min_int64(
            ord,
            key.as_ptr(),
            key.len() as u32,
            value,
        )
    }
}
pub fn set_min_bigint(ord: i64, key: String, value: &BigInt) {
    let data = value.to_string();
    unsafe {
        externs::state::set_min_bigint(
            ord,
            key.as_ptr(),
            key.len() as u32,
            data.as_ptr(),
            data.len() as u32,
        )
    }
}
pub fn set_min_float64(ord: i64, key: String, value: f64) {
    unsafe {
        externs::state::set_min_float64(
            ord,
            key.as_ptr(),
            key.len() as u32,
            value,
        )
    }
}
pub fn set_min_bigfloat(ord: i64, key: String, value: &BigDecimal) {
    let data = value.to_string();
    unsafe {
        externs::state::set_min_bigfloat(
            ord,
            key.as_ptr(),
            key.len() as u32,
            data.as_ptr(),
            data.len() as u32,
        )
    }
}
pub fn set_max_int64(ord: i64, key: String, value: i64) {
    unsafe {
        externs::state::set_max_int64(
            ord,
            key.as_ptr(),
            key.len() as u32,
            value,
        )
    }
}
pub fn set_max_bigint(ord: i64, key: String, value: &BigInt) {
    let data = value.to_string();
    unsafe {
        externs::state::set_max_bigint(
            ord,
            key.as_ptr(),
            key.len() as u32,
            data.as_ptr(),
            data.len() as u32,
        )
    }
}
pub fn set_max_float64(ord: i64, key: String, value: f64) {
    unsafe {
        externs::state::set_max_float64(
            ord,
            key.as_ptr(),
            key.len() as u32,
            value,
        )
    }
}
pub fn set_max_bigfloat(ord: i64, key: String, value: &BigDecimal) {
    let data = value.to_string();
    unsafe {
        externs::state::set_max_bigfloat(
            ord,
            key.as_ptr(),
            key.len() as u32,
            data.as_ptr(),
            data.len() as u32,
        )
    }
}