mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-22 06:47:58 +00:00
cf7e2db1b7
* add follow_stream impl * follow_stream_unpin first draft * add tests for follow_stream_unpin * more tests and fixes for follow_stream_unpin * first pass follow_stream_driver * follow_stream_driver: add tests, fix things, buffer events from last finalized * First pass finishing Backend impl * Fix test compile issues * clippy fixes * clippy fix and consistify light_client * revert lightclient tweak * revert other lightclient thing * cargo fmt * start testing unstable backend behind feature flag * more test fixes and move test-runtime metadata path just incase * fix compile error * ensure transaction progress stream actually used and fix another test * cargo fmt * CI tweak * improve some comments and address some feedback bits * update CI to use our own nightly binary * wait for finalized block perhaps
54 lines
1.7 KiB
Rust
54 lines
1.7 KiB
Rust
// Copyright 2019-2023 Parity Technologies (UK) Ltd.
|
|
// This file is dual-licensed as Apache-2.0 or GPL-3.0.
|
|
// see LICENSE for license details.
|
|
|
|
use super::runtime_types::RuntimeApi;
|
|
|
|
use crate::{backend::BlockRef, client::OnlineClientT, error::Error, Config};
|
|
use derivative::Derivative;
|
|
use std::{future::Future, marker::PhantomData};
|
|
|
|
/// Execute runtime API calls.
|
|
#[derive(Derivative)]
|
|
#[derivative(Clone(bound = "Client: Clone"))]
|
|
pub struct RuntimeApiClient<T, Client> {
|
|
client: Client,
|
|
_marker: PhantomData<T>,
|
|
}
|
|
|
|
impl<T, Client> RuntimeApiClient<T, Client> {
|
|
/// Create a new [`RuntimeApiClient`]
|
|
pub fn new(client: Client) -> Self {
|
|
Self {
|
|
client,
|
|
_marker: PhantomData,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl<T, Client> RuntimeApiClient<T, Client>
|
|
where
|
|
T: Config,
|
|
Client: OnlineClientT<T>,
|
|
{
|
|
/// Obtain a runtime API interface at some block hash.
|
|
pub fn at(&self, block_ref: impl Into<BlockRef<T::Hash>>) -> RuntimeApi<T, Client> {
|
|
RuntimeApi::new(self.client.clone(), block_ref.into())
|
|
}
|
|
|
|
/// Obtain a runtime API interface at the latest block hash.
|
|
pub fn at_latest(
|
|
&self,
|
|
) -> impl Future<Output = Result<RuntimeApi<T, Client>, Error>> + Send + 'static {
|
|
// Clone and pass the client in like this so that we can explicitly
|
|
// return a Future that's Send + 'static, rather than tied to &self.
|
|
let client = self.client.clone();
|
|
async move {
|
|
// get the ref for the latest finalized block and use that.
|
|
let block_ref = client.backend().latest_finalized_block_ref().await?;
|
|
|
|
Ok(RuntimeApi::new(client, block_ref))
|
|
}
|
|
}
|
|
}
|