Skip to main content

dope_sys/io/socket/route/
plan.rs

1use std::mem;
2
3use crate::io::socket::route::{
4    count::Count,
5    selector::{Bootstrap, PrefixPlan, Selector},
6};
7
8/// A selector bound to the dense routing domain it selects from.
9#[derive(Clone, Copy, Debug, Eq, PartialEq)]
10pub struct Plan {
11    count: Count,
12    selector: Selector,
13    prefix: Option<PrefixPlan>,
14    bootstrap: Option<Bootstrap>,
15}
16
17impl Plan {
18    pub const fn new(count: Count, selector: Selector) -> Self {
19        Self {
20            count,
21            selector,
22            prefix: None,
23            bootstrap: None,
24        }
25    }
26
27    pub const fn with_prefix(self, prefix: PrefixPlan) -> Self {
28        Self {
29            prefix: Some(prefix),
30            ..self
31        }
32    }
33
34    pub const fn with_bootstrap(self, bootstrap: Bootstrap) -> Self {
35        Self {
36            bootstrap: Some(bootstrap),
37            ..self
38        }
39    }
40
41    pub const fn count(self) -> Count {
42        self.count
43    }
44
45    pub const fn selector(self) -> Selector {
46        self.selector
47    }
48
49    pub const fn prefix(self) -> Option<PrefixPlan> {
50        self.prefix
51    }
52
53    pub const fn bootstrap(self) -> Option<Bootstrap> {
54        self.bootstrap
55    }
56}
57
58const _: () = {
59    assert!(
60        mem::size_of::<Plan>()
61            == mem::size_of::<(Count, Selector, Option<PrefixPlan>, Option<Bootstrap>)>()
62    );
63};