use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
#[non_exhaustive]
pub struct IssueCredentialBody {
pub holder: String,
pub claims: Value,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub credential_type: Option<String>,
pub validity_seconds: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub purpose: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub authorization_context: Option<Value>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ext: Option<Value>,
}
impl IssueCredentialBody {
pub fn new(holder: String, claims: Value, validity_seconds: u64) -> Self {
Self {
holder,
claims,
validity_seconds,
credential_type: None,
purpose: None,
authorization_context: None,
ext: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct IssueCredentialResponse {
pub credential_id: String,
pub credential: Value,
pub expires_at: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub issued_at: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
#[non_exhaustive]
pub struct RevokeCredentialBody {
pub credential_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ext: Option<Value>,
}
impl RevokeCredentialBody {
pub fn new(credential_id: String) -> Self {
Self {
credential_id,
reason: None,
ext: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RevokeCredentialResponse {
pub credential_id: String,
pub revoked_at: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum IssuedCredentialStatus {
Active,
Expired,
Revoked,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ListCredentialsBody {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub holder: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub credential_type: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub status: Option<IssuedCredentialStatus>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub page_size: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub cursor: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ext: Option<Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct IssuedCredentialSummary {
pub credential_id: String,
pub holder: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub credential_type: Option<String>,
pub issued_at: String,
pub expires_at: String,
pub status: IssuedCredentialStatus,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub revoked_at: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub revocation_reason: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ListCredentialsResponse {
pub credentials: Vec<IssuedCredentialSummary>,
pub truncated: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub cursor: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ext: Option<Value>,
}