avail-rust-core 0.5.1

Avail Rust SDK core library
Documentation
use super::Error;
use crate::types::substrate::{FeeDetails, RuntimeDispatchInfo};
use primitive_types::H256;
use subxt_rpcs::RpcClient;

pub async fn raw_call<T: codec::Decode>(
	client: &RpcClient,
	method: &str,
	data: &[u8],
	at: Option<H256>,
) -> Result<T, Error> {
	let result: String = super::state::call(client, method, data, at).await?;
	let result = const_hex::decode(result.trim_start_matches("0x")).map_err(Error::from)?;
	let result = T::decode(&mut result.as_slice()).map_err(|e| Error::DecodingFailed(e.to_string()))?;

	Ok(result)
}

pub async fn api_transaction_payment_query_info(
	client: &RpcClient,
	mut extrinsic: Vec<u8>,
	at: Option<H256>,
) -> Result<RuntimeDispatchInfo, Error> {
	let len = extrinsic.len() as u32;
	let bytes = len.to_ne_bytes();
	extrinsic.extend_from_slice(&bytes);

	raw_call(client, "TransactionPaymentApi_query_info", &extrinsic, at).await
}

pub async fn api_transaction_payment_query_fee_details(
	client: &RpcClient,
	mut extrinsic: Vec<u8>,
	at: Option<H256>,
) -> Result<FeeDetails, Error> {
	let len = extrinsic.len() as u32;
	let bytes = len.to_ne_bytes();
	extrinsic.extend_from_slice(&bytes);

	raw_call(client, "TransactionPaymentApi_query_fee_details", &extrinsic, at).await
}

pub async fn api_transaction_payment_query_call_info(
	client: &RpcClient,
	mut call: Vec<u8>,
	at: Option<H256>,
) -> Result<RuntimeDispatchInfo, Error> {
	let len = call.len() as u32;
	let bytes = len.to_ne_bytes();
	call.extend_from_slice(&bytes);

	raw_call(client, "TransactionPaymentCallApi_query_call_info", &call, at).await
}

pub async fn api_transaction_payment_query_call_fee_details(
	client: &RpcClient,
	mut call: Vec<u8>,
	at: Option<H256>,
) -> Result<FeeDetails, Error> {
	let len = call.len() as u32;
	let bytes = len.to_ne_bytes();
	call.extend_from_slice(&bytes);

	raw_call(client, "TransactionPaymentCallApi_query_call_fee_details", &call, at).await
}