didcomm 0.4.1

DIDComm for Rust
Documentation
use crate::did::DIDResolver;
use crate::error::{ErrorKind, Result};
use crate::{FromPrior, Message, UnpackMetadata};

pub(crate) async fn _try_unpack_plaintext<'dr, 'sr>(
    msg: &str,
    did_resolver: &'dr (dyn DIDResolver + 'dr),
    metadata: &mut UnpackMetadata,
) -> Result<Option<Message>> {
    let msg = match Message::from_str(msg) {
        Ok(m) => m,
        Err(e) if e.kind() == ErrorKind::Malformed => return Ok(None),
        Err(e) => Err(e)?,
    }
    .validate()?;

    if let Some(from_prior) = &msg.from_prior {
        let (unpacked_from_prior, from_prior_issuer_kid) =
            FromPrior::unpack(from_prior, did_resolver).await?;

        metadata.from_prior = Some(unpacked_from_prior);
        metadata.from_prior_issuer_kid = Some(from_prior_issuer_kid);
    };

    Ok(Some(msg))
}