use candid::Principal;
use chainsight_sdk_v2_types::SnapshotValue;
use ic_cdk::api::call::CallResult;
use crate::transport::DefaultTransport;
#[derive(Clone)]
pub struct Indexer {
principal: Principal,
transport: DefaultTransport,
}
impl Indexer {
pub fn new(principal: &Principal) -> Self {
Indexer {
principal: principal.clone(),
transport: DefaultTransport::new(),
}
}
pub async fn get_value(&self, key: String) -> anyhow::Result<Option<SnapshotValue>> {
let out: CallResult<(Option<SnapshotValue>,)> = (self.transport)
.call(&self.principal, "get_value", (key,))
.await;
match out {
Ok((Some(value),)) => Ok(Some(value)),
Ok((None,)) => Ok(None),
Err(err) => Err(anyhow::anyhow!("Error: {:?}", err)),
}
}
}