use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub struct AgentNameBody {
pub did: String,
pub name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub struct AgentNameResultBody {
pub did: String,
pub name: String,
pub enabled: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub struct AgentNameCheckBody {
pub did: String,
pub name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub struct AgentNameCheckResultBody {
pub name: String,
pub domain: String,
pub available: bool,
pub reserved: bool,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn request_bodies_serialise_camel_case() {
let v = serde_json::to_value(AgentNameBody {
did: "did:webvh:QmScid:example.com".into(),
name: "ops".into(),
})
.unwrap();
assert_eq!(v["did"], "did:webvh:QmScid:example.com");
assert_eq!(v["name"], "ops");
let v = serde_json::to_value(AgentNameCheckBody {
did: "did:webvh:QmScid:example.com".into(),
name: "ops".into(),
})
.unwrap();
assert_eq!(v.as_object().unwrap().len(), 2, "no stray fields");
}
#[test]
fn check_result_distinguishes_reserved_from_taken() {
let reserved: AgentNameCheckResultBody = serde_json::from_value(serde_json::json!({
"name": "admin", "domain": "example.com",
"available": false, "reserved": true,
}))
.unwrap();
assert!(reserved.reserved && !reserved.available);
let taken: AgentNameCheckResultBody = serde_json::from_value(serde_json::json!({
"name": "ops", "domain": "example.com",
"available": false, "reserved": false,
}))
.unwrap();
assert!(!taken.reserved && !taken.available);
}
#[test]
fn result_body_reports_whether_the_name_resolves() {
let v = serde_json::to_value(AgentNameResultBody {
did: "did:webvh:QmScid:example.com".into(),
name: "ops".into(),
enabled: false,
})
.unwrap();
assert_eq!(v["enabled"], false);
}
}