use std::sync::Arc;
use world_id_core::artifacts::{
cached::CachedZkArtifactSource, error::ZkArtifactError, ZkArtifactSource,
};
use world_id_proof::{
artifacts::embedded::EmbeddedZkArtifacts as CoreEmbeddedZkArtifacts,
CircomGroth16Material,
};
use super::WalletKitZkArtifactSource;
#[derive(uniffi::Object)]
pub struct EmbeddedZkArtifacts(CachedZkArtifactSource);
impl Default for EmbeddedZkArtifacts {
fn default() -> Self {
Self::new()
}
}
#[uniffi::export]
impl EmbeddedZkArtifacts {
#[uniffi::constructor]
#[must_use]
pub fn new() -> Self {
Self(CachedZkArtifactSource::new(CoreEmbeddedZkArtifacts))
}
#[must_use]
pub fn as_zk_artifact_source(
self: Arc<Self>,
) -> Arc<dyn WalletKitZkArtifactSource> {
self
}
}
impl ZkArtifactSource for EmbeddedZkArtifacts {
fn query_material(&self) -> Result<Arc<CircomGroth16Material>, ZkArtifactError> {
self.0.query_material()
}
fn nullifier_material(
&self,
) -> Result<Arc<CircomGroth16Material>, ZkArtifactError> {
self.0.nullifier_material()
}
fn ownership_prover(
&self,
) -> Result<world_id_proof::OwnershipProver, ZkArtifactError> {
self.0.ownership_prover()
}
fn ownership_verifier(
&self,
) -> Result<world_id_proof::OwnershipVerifier, ZkArtifactError> {
self.0.ownership_verifier()
}
}