use base64::{prelude::BASE64_URL_SAFE_NO_PAD, Engine};
use world_id_core::primitives::OwnershipProof as CoreOwnershipProof;
use crate::{error::WalletKitError, FieldElement};
#[derive(Debug, Clone, uniffi::Object)]
pub struct OwnershipProof(pub(crate) CoreOwnershipProof);
#[uniffi::export]
impl OwnershipProof {
pub fn encode(&self) -> Result<Vec<u8>, WalletKitError> {
let mut buffer = Vec::new();
ciborium::into_writer(&self.0, &mut buffer).map_err(|_| {
WalletKitError::SerializationError {
error: "unexpected error serializing `OwnershipProof`".to_string(),
}
})?;
Ok(buffer)
}
pub fn encode_b64(&self) -> Result<String, WalletKitError> {
Ok(BASE64_URL_SAFE_NO_PAD.encode(self.encode()?))
}
#[must_use]
pub fn merkle_root(&self) -> FieldElement {
self.0.merkle_root.into()
}
}