use core::ops::Deref;
use soroban_sdk::{vec, Address, Bytes, Env, IntoVal, Symbol};
use crate::error::ParseError;
use crate::payload::{parse_payload, Update};
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct VerifiedPayload(Update);
impl VerifiedPayload {
pub fn into_inner(self) -> Update {
self.0
}
}
impl Deref for VerifiedPayload {
type Target = Update;
fn deref(&self) -> &Self::Target {
&self.0
}
}
pub struct PythLazerClient<'a> {
env: &'a Env,
address: Address,
}
impl<'a> PythLazerClient<'a> {
pub fn new(env: &'a Env, address: &Address) -> Self {
Self {
env,
address: address.clone(),
}
}
pub fn verify_update(&self, data: &Bytes) -> Result<VerifiedPayload, ParseError> {
let verified: Bytes = self.env.invoke_contract(
&self.address,
&Symbol::new(self.env, "verify_update"),
vec![self.env, data.into_val(self.env)],
);
parse_payload(&verified).map(VerifiedPayload)
}
}