rebase 0.1.6

Rebase is a library for witnessing cryptographic attestations and issuing verifiable credentials
Documentation
use crate::types::{
    defs::{AlchemyNetworks, Statement, Subject},
    enums::subject::Subjects,
    error::StatementError,
};
use chrono::DateTime;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use tsify::Tsify;
use wasm_bindgen::prelude::*;

#[derive(Clone, Debug, Deserialize, JsonSchema, Serialize, Tsify)]
#[tsify(into_wasm_abi, from_wasm_abi)]
pub struct NftOwnershipVerificationStatement {
    pub contract_address: String,
    pub subject: Subjects,
    pub network: AlchemyNetworks,
    pub issued_at: String,
}

impl Statement for NftOwnershipVerificationStatement {
    fn generate_statement(&self) -> Result<String, StatementError> {
        DateTime::parse_from_rfc3339(&self.issued_at)
            .map_err(|e| StatementError::Statement(format!("failed to parse issued_at: {}", e)))?;

        Ok(format!(
            "The {} {} owns an asset from the contract {} on the network {} at time of {}",
            self.subject.statement_title()?,
            self.subject.display_id()?,
            self.contract_address,
            self.network.to_string(),
            self.issued_at,
        ))
    }
}