Skip to main content

vta_sdk/protocols/
discovery.rs

1use serde::{Deserialize, Serialize};
2
3/// Empty request body for the capabilities discovery operation.
4/// Exists so the trust-task envelope's `payload` field has a typed
5/// shape; the operation takes no input parameters.
6#[derive(Debug, Clone, Serialize, Deserialize, Default)]
7#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
8pub struct CapabilitiesBody {}
9
10pub const PROTOCOL_BASE: &str = "https://firstperson.network/protocols/discovery/1.0";
11
12pub const DISCOVER_CAPABILITIES: &str =
13    "https://firstperson.network/protocols/discovery/1.0/discover-capabilities";
14pub const DISCOVER_CAPABILITIES_RESULT: &str =
15    "https://firstperson.network/protocols/discovery/1.0/discover-capabilities-result";
16
17/// Response describing the VTA's capabilities and enabled features.
18#[derive(Debug, Clone, Serialize, Deserialize)]
19#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
20pub struct CapabilitiesResponse {
21    /// Crate version of the VTA service.
22    pub version: String,
23    /// Enabled features/modules.
24    pub features: FeaturesInfo,
25    /// Enabled services (REST, DIDComm).
26    pub services: ServicesInfo,
27    /// Configured WebVH servers available for DID creation.
28    pub webvh_servers: Vec<WebvhServerInfo>,
29    /// Supported DID creation modes.
30    pub did_creation_modes: Vec<String>,
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize)]
34#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
35pub struct FeaturesInfo {
36    pub webvh: bool,
37    pub didcomm: bool,
38    pub tee: bool,
39    pub rest: bool,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
43#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
44pub struct ServicesInfo {
45    pub rest: bool,
46    pub didcomm: bool,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize)]
50#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
51pub struct WebvhServerInfo {
52    pub id: String,
53    #[serde(default, skip_serializing_if = "Option::is_none")]
54    pub label: Option<String>,
55}