dope_core/driver/settings/config/
mod.rs1use crate::driver::{settings, settings::errors};
2
3mod layout;
4pub(super) mod plan;
5
6#[derive(Clone, Copy, PartialEq, Eq)]
7pub struct Config {
8 queues: settings::QueueLayout,
9 schedule: settings::Schedule,
10 files: settings::FileSlots,
11 recv: settings::Receive,
12 domains: settings::Domain,
13 progress: settings::Progress,
14}
15
16impl Default for Config {
17 fn default() -> Self {
18 const FILES: settings::FileSlots = settings::FileSlots::fixed::<0, 256>();
19 Self::new(
20 settings::QueueLayout::fixed::<1024, 2048>(),
21 settings::Schedule::fixed::<{ u16::MAX as u32 - FILES.capacity().raw() }, 65_536>(),
22 FILES,
23 settings::Receive::fixed::<128, 4096>(),
24 settings::Domain::ZERO,
25 settings::Progress::Prompt,
26 )
27 }
28}
29
30impl Config {
31 pub const fn new(
33 queues: settings::QueueLayout,
34 schedule: settings::Schedule,
35 files: settings::FileSlots,
36 recv: settings::Receive,
37 domains: settings::Domain,
38 progress: settings::Progress,
39 ) -> Self {
40 Self {
41 queues,
42 schedule,
43 files,
44 recv,
45 domains,
46 progress,
47 }
48 }
49
50 #[must_use]
51 pub const fn file_slots(&self) -> settings::FileSlots {
52 self.files
53 }
54
55 #[must_use]
56 pub const fn queue_layout(&self) -> settings::QueueLayout {
57 self.queues
58 }
59
60 #[must_use]
61 pub const fn schedule(&self) -> settings::Schedule {
62 self.schedule
63 }
64
65 #[must_use]
66 pub const fn progress(&self) -> settings::Progress {
67 self.progress
68 }
69
70 #[must_use]
71 pub const fn with_files(mut self, files: settings::FileSlots) -> Self {
72 self.files = files;
73 self
74 }
75
76 #[must_use]
77 pub const fn receive(&self) -> settings::Receive {
78 self.recv
79 }
80
81 #[must_use]
84 pub const fn domains(&self) -> settings::Domain {
85 self.domains
86 }
87
88 #[must_use]
89 pub const fn with_domains(mut self, domains: settings::Domain) -> Self {
90 self.domains = domains;
91 self
92 }
93
94 #[must_use]
95 pub const fn with_queues(mut self, queues: settings::QueueLayout) -> Self {
96 self.queues = queues;
97 self
98 }
99
100 #[must_use]
101 pub const fn set_schedule(mut self, schedule: settings::Schedule) -> Self {
102 self.schedule = schedule;
103 self
104 }
105
106 #[must_use]
108 pub const fn for_profile<P: settings::Profile>() -> Self {
109 const {
110 let config = Self::new(
111 P::QUEUES,
112 P::SCHEDULER,
113 P::FILES,
114 P::RECEIVE,
115 P::RESIDENT_DOMAINS,
116 P::COMPLETION_PROGRESS,
117 );
118 assert!(plan::Plan::new(config).is_ok(), "capacity");
119 config
120 }
121 }
122
123 #[must_use]
124 pub fn with_receive(mut self, receive: settings::Receive) -> Self {
125 self.recv = receive;
126 self
127 }
128
129 pub(crate) fn into_plan(self) -> Result<settings::Plan, errors::Config> {
131 settings::Plan::new(self)
132 }
133}
134
135const _: () = {
136 assert!(std::mem::align_of::<Config>() == std::mem::align_of::<u32>());
137};