pub mod accepts;
pub mod defaults;
pub mod storage;
pub mod validate;
pub use accepts::{
AcceptsCriterion, delete_accepts, get_accepts, list_accepts, store_accepts,
validate_accepts_query,
};
pub use defaults::{DEFAULT_ISSUES_TYPES, seed_default_issues};
pub use validate::{validate_instance, validate_issued};
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use serde_json::Value as JsonValue;
use vti_common::error::AppError;
use vti_common::store::KeyspaceHandle;
pub use storage::{
SCHEMAS_PREFIX, delete_schema, get_schema, list_by_kind, list_schemas, schema_exists,
store_schema,
};
pub const TYPE_URI_MAX_BYTES: usize = 512;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum SchemaKind {
Issues,
Accepts,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct SchemaEntry {
pub type_uri: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub dtg_type: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub credential_schema: Option<JsonValue>,
pub kind: SchemaKind,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
pub created_at: DateTime<Utc>,
pub created_by_did: String,
}
impl SchemaEntry {
pub fn is_issues(&self) -> bool {
self.kind == SchemaKind::Issues
}
}
pub async fn is_issues_registered(ks: &KeyspaceHandle, type_uri: &str) -> Result<bool, AppError> {
Ok(get_schema(ks, type_uri)
.await?
.is_some_and(|s| s.is_issues()))
}