1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#![allow(unused_variables, dead_code, missing_docs)]
pub mod integration;
pub mod memory_registry;
pub mod protocol;
pub mod types;
use std::fmt::{Debug, Formatter};
use crate::{common::url::Url, registry::memory_registry::MemoryNotifyListener};
pub trait Registry {
type NotifyListener;
fn register(&mut self, url: Url) -> Result<(), crate::StdError>;
fn unregister(&mut self, url: Url) -> Result<(), crate::StdError>;
fn subscribe(&self, url: Url, listener: Self::NotifyListener) -> Result<(), crate::StdError>;
fn unsubscribe(&self, url: Url, listener: Self::NotifyListener) -> Result<(), crate::StdError>;
}
pub trait NotifyListener {
fn notify(&self, event: ServiceEvent);
fn notify_all(&self, event: ServiceEvent);
}
#[derive(Debug)]
pub struct ServiceEvent {
pub key: String,
pub action: String,
pub service: Vec<Url>,
}
pub type BoxRegistry = Box<dyn Registry<NotifyListener = MemoryNotifyListener> + Send + Sync>;
impl Debug for BoxRegistry {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
f.write_str("BoxRegistry")
}
}
#[derive(Default)]
pub struct RegistryWrapper {
pub registry: Option<Box<dyn Registry<NotifyListener = MemoryNotifyListener>>>,
}
impl Clone for RegistryWrapper {
fn clone(&self) -> Self {
Self { registry: None }
}
}
impl Debug for RegistryWrapper {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("RegistryWrapper").finish()
}
}