pub mod acl_management;
pub mod attestation_management;
pub mod audit_management;
pub mod auth;
pub mod backup_management;
pub mod context_management;
pub mod did_management;
pub mod did_template_management;
pub mod discovery;
#[cfg(feature = "didcomm")]
pub mod join_requests;
pub mod key_management;
pub mod passkey_login;
pub mod protocol_management;
#[cfg(feature = "provision-integration")]
pub mod provision_integration_management;
pub mod seed_management;
pub mod vta_management;
pub const PROBLEM_REPORT_TYPE: &str = "https://didcomm.org/report-problem/2.0/problem-report";
pub const TRUST_PING_TYPE: &str = "https://didcomm.org/trust-ping/2.0/ping";
pub const MESSAGE_PICKUP_STATUS_TYPE: &str = "https://didcomm.org/messagepickup/3.0/status";
pub mod problem_report_codes {
pub const UNAUTHORIZED: &str = "e.p.msg.unauthorized";
pub const BAD_REQUEST: &str = "e.p.msg.bad-request";
pub const NOT_FOUND: &str = "e.p.msg.not-found";
pub const CONFLICT: &str = "e.p.msg.conflict";
pub const INTERNAL: &str = "e.p.msg.internal-error";
pub const FORBIDDEN: &str = "e.p.msg.forbidden";
pub const PROVISION_CONTEXT_REQUIRED: &str = "provision/integration:context_required";
}
pub fn extract_problem_report(body: &serde_json::Value) -> (String, String) {
let code = body
.get("code")
.and_then(|v| v.as_str())
.unwrap_or("unknown")
.to_string();
let comment = body
.get("comment")
.and_then(|v| v.as_str())
.unwrap_or("no details provided")
.to_string();
(code, comment)
}