identity_credential/sd_jwt_vc/
presentation.rsuse super::Error;
use super::Result;
use super::SdJwtVc;
use super::SdJwtVcClaims;
use sd_jwt_payload_rework::Disclosure;
use sd_jwt_payload_rework::Hasher;
use sd_jwt_payload_rework::KeyBindingJwt;
use sd_jwt_payload_rework::SdJwtPresentationBuilder;
#[derive(Debug, Clone)]
pub struct SdJwtVcPresentationBuilder {
vc_claims: SdJwtVcClaims,
builder: SdJwtPresentationBuilder,
}
impl SdJwtVcPresentationBuilder {
pub fn new(token: SdJwtVc, hasher: &dyn Hasher) -> Result<Self> {
let SdJwtVc {
sd_jwt,
parsed_claims: vc_claims,
} = token;
let builder = sd_jwt.into_presentation(hasher).map_err(Error::SdJwt)?;
Ok(Self { vc_claims, builder })
}
pub fn conceal(mut self, path: &str) -> Result<Self> {
self.builder = self.builder.conceal(path).map_err(Error::SdJwt)?;
Ok(self)
}
pub fn attach_key_binding_jwt(mut self, kb_jwt: KeyBindingJwt) -> Self {
self.builder = self.builder.attach_key_binding_jwt(kb_jwt);
self
}
pub fn finish(self) -> Result<(SdJwtVc, Vec<Disclosure>)> {
let (sd_jwt, disclosures) = self.builder.finish()?;
Ok((SdJwtVc::new(sd_jwt, self.vc_claims), disclosures))
}
}