#[cfg(feature = "acme-profiles")]
use std::collections::BTreeMap;
use crate::protocol::Url;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Directory {
pub new_nonce: Url,
pub new_account: Url,
pub new_order: Url,
#[serde(default)]
pub new_authz: Option<Url>,
pub revoke_cert: Url,
pub key_change: Url,
#[serde(default)]
pub meta: Option<Metadata>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Metadata {
#[serde(default)]
pub terms_of_service: Option<Url>,
#[serde(default)]
pub website: Option<Url>,
#[cfg(feature = "acme-profiles")]
#[serde(default)]
pub profiles: Option<BTreeMap<String, serde_json::Value>>,
#[serde(default)]
pub caa_identities: Vec<String>,
#[serde(default)]
pub external_account_required: Option<bool>,
}
#[cfg(test)]
mod tests {
use super::*;
use crate::response;
#[test]
fn deserialize_directory() {
let response = response!("directory.http");
let directory: Directory = serde_json::from_str(response.body()).unwrap();
assert_eq!(
directory.new_account,
"https://example.com/acme/new-account".parse().unwrap()
);
let metadata = directory.meta.unwrap();
assert_eq!(
metadata.website,
Some("https://www.example.com/".parse().unwrap())
);
#[cfg(feature = "acme-profiles")]
assert!(metadata.profiles.unwrap().contains_key("tls-server"));
}
}