Skip to main content

dope_core/driver/settings/
errors.rs

1//! Driver configuration failures.
2
3use o3::buffer::storage::Zero;
4
5use crate::{
6    driver::{route, route::table, settings, settings::demands::slots},
7    io::datagram::payload,
8};
9
10/// Failure to construct a representable driver plan.
11#[derive(Clone, Copy, Debug, PartialEq, Eq)]
12#[repr(u8)]
13pub enum Config {
14    QueueSubmissionsOutOfRange {
15        actual: u32,
16        minimum: u32,
17        maximum: u32,
18    },
19    ReceiveEntriesOutOfRange {
20        actual: u32,
21        minimum: u32,
22        maximum: u32,
23    },
24    ReceiveEntriesNotPowerOfTwo {
25        actual: u16,
26    },
27    ReceiveBuffer(Zero),
28    DatagramPayload(payload::Error),
29    DescriptorCapacityOutOfRange {
30        accepted: u32,
31        outbound: u32,
32        actual: u64,
33        minimum: u32,
34        maximum: u32,
35    },
36    ReadyCapacity {
37        files: u32,
38        ready: u32,
39        maximum: u32,
40    },
41}
42
43#[derive(Clone, Copy, Debug, Eq, PartialEq)]
44#[repr(u8)]
45pub enum Claim {
46    DuplicateRoute(route::Id),
47    AcceptedDescriptorsOverflow {
48        current: u32,
49        added: u32,
50    },
51    OutboundDescriptorsOverflow {
52        current: u32,
53        added: u32,
54    },
55    DescriptorConnectionsOutOfRange {
56        actual: usize,
57        minimum: usize,
58        maximum: usize,
59    },
60    ReceiveEntriesOverflow {
61        current: u32,
62        added: u32,
63    },
64    ReceiveEntriesPowerOfTwoOverflow {
65        requested: u32,
66    },
67    ReceiveEntriesTooLarge {
68        actual: usize,
69        maximum: usize,
70    },
71    ResidentDomainsOverflow(settings::DomainSum),
72    QueueSubmissionsPowerOfTwoOverflow {
73        requested: u32,
74    },
75    SchedulerReadyOverflow(slots::Sum),
76    SchedulerTimersOverflow(slots::Sum),
77    Layout(Config),
78}
79
80impl From<Config> for Claim {
81    fn from(source: Config) -> Self {
82        Self::Layout(source)
83    }
84}
85
86impl From<settings::DomainSum> for Claim {
87    fn from(source: settings::DomainSum) -> Self {
88        Self::ResidentDomainsOverflow(source)
89    }
90}
91
92impl From<table::Invalid> for Claim {
93    fn from(source: table::Invalid) -> Self {
94        Self::DescriptorConnectionsOutOfRange {
95            actual: source.actual,
96            minimum: source.minimum,
97            maximum: source.maximum,
98        }
99    }
100}