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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
use crate::{Context, Executor};
use ockam_core::compat::sync::Arc;
use ockam_core::{AccessControl, Address, AllowAll, Mailbox, Mailboxes};
pub struct NullWorker;
impl ockam_core::Worker for NullWorker {
type Context = Context;
type Message = ();
}
pub struct NodeBuilder<AC>
where
AC: AccessControl,
{
access_control: AC,
logging: bool,
}
impl NodeBuilder<AllowAll> {
pub fn without_access_control() -> Self {
Self {
access_control: AllowAll,
logging: true,
}
}
}
impl<AC> NodeBuilder<AC>
where
AC: AccessControl,
{
pub fn with_access_control(access_control: AC) -> Self {
Self {
access_control,
logging: true,
}
}
pub fn no_logging(self) -> Self {
Self {
logging: false,
..self
}
}
#[inline]
pub fn build(self) -> (Context, Executor) {
if self.logging {
setup_tracing();
}
info!(
"Initializing ockam node with access control: {:?}",
self.access_control
);
let mut exe = Executor::new();
let addr: Address = "app".into();
let (ctx, sender, _) = Context::new(
exe.runtime(),
exe.sender(),
Mailboxes::new(Mailbox::new(addr, Arc::new(self.access_control)), vec![]),
None,
);
exe.initialize_system("app", sender);
(ctx, exe)
}
}
fn setup_tracing() {
#[cfg(feature = "std")]
{
use tracing_subscriber::{filter::LevelFilter, fmt, prelude::*, EnvFilter};
static ONCE: std::sync::Once = std::sync::Once::new();
ONCE.call_once(|| {
let filter = EnvFilter::try_from_env("OCKAM_LOG").unwrap_or_else(|_| {
EnvFilter::default()
.add_directive(LevelFilter::INFO.into())
.add_directive("ockam_node=info".parse().unwrap())
});
let _ = tracing_subscriber::registry()
.with(filter)
.with(tracing_error::ErrorLayer::default())
.with(fmt::layer())
.try_init();
});
}
}