use serde::Serialize;
pub const CATALOG_SCHEMA_VERSION: u32 = 1;
pub const PROTOCOL_VERSION: u32 = 1;
#[derive(Debug, Clone, Serialize)]
pub struct VersionInfo {
pub name: &'static str,
pub package_version: &'static str,
pub protocol_version: u32,
pub catalog_schema_versions: &'static [u32],
pub minimum_hermes_plugin_version: &'static str,
}
impl VersionInfo {
pub fn current() -> Self {
Self {
name: "auth-cloudflare",
package_version: crate::VERSION,
protocol_version: PROTOCOL_VERSION,
catalog_schema_versions: &[CATALOG_SCHEMA_VERSION],
minimum_hermes_plugin_version: "0.0.1",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn version_info_current_matches_contract() {
let info = VersionInfo::current();
assert_eq!(info.name, "auth-cloudflare");
assert_eq!(info.package_version, crate::VERSION);
assert_eq!(info.protocol_version, 1);
assert_eq!(info.catalog_schema_versions, &[1]);
assert_eq!(info.minimum_hermes_plugin_version, "0.0.1");
}
#[test]
fn version_info_serializes_to_feedback_06_shape() {
let value = serde_json::to_value(VersionInfo::current()).expect("serialize");
let object = value.as_object().expect("object");
assert_eq!(
object.keys().cloned().collect::<std::collections::BTreeSet<_>>(),
[
"name",
"package_version",
"protocol_version",
"catalog_schema_versions",
"minimum_hermes_plugin_version",
]
.into_iter()
.map(String::from)
.collect()
);
assert_eq!(value["name"], "auth-cloudflare");
assert_eq!(value["package_version"], crate::VERSION);
assert_eq!(value["protocol_version"], 1);
assert_eq!(value["catalog_schema_versions"], serde_json::json!([1]));
assert_eq!(value["minimum_hermes_plugin_version"], "0.0.1");
}
}