use solana_program::account_info::AccountInfo;
use crate::check_pubkey_eq;
#[inline(always)]
pub fn get_slot<'a, T>(clock_sysvar: T) -> u64
where
T: AsRef<AccountInfo<'a>>,
{
assert!(check_pubkey_eq(
clock_sysvar.as_ref().key,
&solana_program::sysvar::clock::ID
));
unsafe {
let clock_data = &*clock_sysvar.as_ref().data.as_ptr();
core::ptr::read_unaligned(clock_data.as_ptr() as *const u64)
}
}
crate::cfg_client! {
use crate::OnDemandError;
use futures::TryFutureExt;
pub async fn fetch_async(
client: &solana_client::nonblocking::rpc_client::RpcClient,
) -> std::result::Result<solana_sdk::sysvar::clock::Clock, crate::OnDemandError> {
let pubkey = solana_sdk::sysvar::clock::id();
let data = client
.get_account_data(&pubkey)
.map_err(|_| OnDemandError::AccountNotFound)
.await?
.to_vec();
bincode::deserialize(&data).map_err(|_| OnDemandError::AccountNotFound)
}
}