#![deny(missing_docs)]
use std::slice::Iter;
use async_trait::async_trait;
pub use crate::reader::{AsyncPostValidator, PostValidator};
use crate::{
hashed_uri::HashedUri,
maybe_send_sync::{MaybeSend, MaybeSync},
Result,
};
pub enum DynamicAssertionContent {
Cbor(Vec<u8>),
Json(String),
Binary(String, Vec<u8>),
}
pub trait DynamicAssertion {
fn label(&self) -> String;
fn reserve_size(&self) -> Result<usize>;
fn content(
&self,
label: &str,
size: Option<usize>,
claim: &PartialClaim,
) -> Result<DynamicAssertionContent>;
}
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
pub trait AsyncDynamicAssertion: MaybeSync + MaybeSend {
fn label(&self) -> String;
fn reserve_size(&self) -> Result<usize>;
async fn content(
&self,
label: &str,
size: Option<usize>,
claim: &PartialClaim,
) -> Result<DynamicAssertionContent>;
}
#[derive(Debug, Default, Eq, PartialEq)]
pub struct PartialClaim {
assertion_uris: Vec<HashedUri>,
}
impl PartialClaim {
pub fn assertions(&self) -> Iter<'_, HashedUri> {
self.assertion_uris.iter()
}
pub(crate) fn add_assertion(&mut self, assertion: &HashedUri) {
self.assertion_uris.push(assertion.clone());
}
}