pub mod storage;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use serde_json::Value as JsonValue;
use uuid::Uuid;
pub const VETTER_GRANT_ROW_TYPE: &str = vta_sdk::protocols::vetting::VETTER_ROLE_ACTION;
pub use storage::{
ENDORSEMENTS_PREFIX, count_live_by_type, delete_endorsement, endorsements_by_type,
endorsements_for_subject, get_endorsement, get_endorsement_raw, list_endorsements,
list_endorsements_matching, mark_revoked, replace_if_unchanged, store_endorsement,
};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
#[derive(utoipa::ToSchema)]
pub struct Endorsement {
pub id: Uuid,
pub endorsement_type: String,
pub issuer_did: String,
pub subject_did: String,
pub claim: JsonValue,
pub status_list_index: u32,
#[serde(alias = "vecId")]
pub credential_id: String,
pub created_at: DateTime<Utc>,
#[serde(default)]
pub revoked_at: Option<DateTime<Utc>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub valid_until: Option<DateTime<Utc>>,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub auto_granted: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[schema(value_type = Option<Object>)]
pub credential: Option<JsonValue>,
}
impl Endorsement {
pub fn is_revoked(&self) -> bool {
self.revoked_at.is_some()
}
}