1use base64::{prelude::BASE64_URL_SAFE_NO_PAD, Engine};
2use world_id_core::primitives::OwnershipProof as CoreOwnershipProof;
3
4use crate::{error::WalletKitError, FieldElement};
5
6#[derive(Debug, Clone, uniffi::Object)]
8pub struct OwnershipProof(pub(crate) CoreOwnershipProof);
9
10#[uniffi::export]
11impl OwnershipProof {
12 pub fn encode(&self) -> Result<Vec<u8>, WalletKitError> {
17 let mut buffer = Vec::new();
18 ciborium::into_writer(&self.0, &mut buffer).map_err(|_| {
19 WalletKitError::SerializationError {
20 error: "unexpected error serializing `OwnershipProof`".to_string(),
21 }
22 })?;
23 Ok(buffer)
24 }
25
26 pub fn encode_b64(&self) -> Result<String, WalletKitError> {
31 Ok(BASE64_URL_SAFE_NO_PAD.encode(self.encode()?))
32 }
33
34 #[must_use]
36 pub fn merkle_root(&self) -> FieldElement {
37 self.0.merkle_root.into()
38 }
39}