pub trait OperatorMessages: Send + Sync {
fn integration_label(&self) -> &str;
fn integration_label_lower(&self) -> &str;
fn pnm_admin_command_hint(&self, context_id: &str, setup_did: &str) -> String;
fn success_screen_message(&self) -> Option<&str> {
None
}
}
pub struct MediatorMessages;
impl OperatorMessages for MediatorMessages {
fn integration_label(&self) -> &str {
"Mediator"
}
fn integration_label_lower(&self) -> &str {
"mediator"
}
fn pnm_admin_command_hint(&self, context_id: &str, setup_did: &str) -> String {
format!(
"pnm contexts create --id {context_id} --name \"Mediator\" \\\n \
--admin-did {setup_did} --admin-expires 1h"
)
}
}
pub struct WebvhServerMessages;
impl OperatorMessages for WebvhServerMessages {
fn integration_label(&self) -> &str {
"WebVH server"
}
fn integration_label_lower(&self) -> &str {
"webvh server"
}
fn pnm_admin_command_hint(&self, context_id: &str, setup_did: &str) -> String {
format!(
"pnm contexts create --id {context_id} --name \"WebVH server\" \\\n \
--admin-did {setup_did} --admin-expires 1h"
)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn mediator_pnm_command_matches_donor_layout() {
assert_eq!(
MediatorMessages.pnm_admin_command_hint("prod-mediator", "did:key:z6MkExample"),
"pnm contexts create --id prod-mediator --name \"Mediator\" \\\n --admin-did did:key:z6MkExample --admin-expires 1h",
);
}
#[test]
fn webvh_server_pnm_command_uses_webvh_label() {
let cmd = WebvhServerMessages.pnm_admin_command_hint("prod-webvh", "did:key:z6MkExample");
assert!(cmd.contains("--name \"WebVH server\""));
assert!(cmd.contains("--admin-did did:key:z6MkExample"));
assert!(cmd.contains("--id prod-webvh"));
}
#[test]
fn integration_labels_are_distinct() {
assert_ne!(
MediatorMessages.integration_label(),
WebvhServerMessages.integration_label()
);
assert_ne!(
MediatorMessages.integration_label_lower(),
WebvhServerMessages.integration_label_lower()
);
}
#[test]
fn defaults_have_no_success_message() {
assert!(MediatorMessages.success_screen_message().is_none());
assert!(WebvhServerMessages.success_screen_message().is_none());
}
#[test]
fn trait_object_is_send_sync() {
fn assert_send_sync<T: Send + Sync + ?Sized>() {}
assert_send_sync::<dyn OperatorMessages>();
}
}