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    ReceiveAllocationTooLarge {
29        entries: u16,
30        buffer_len: u32,
31        actual: u64,
32        maximum: u64,
33    },
34    DatagramPayload(payload::Error),
35    DescriptorCapacityOutOfRange {
36        accepted: u32,
37        outbound: u32,
38        actual: u64,
39        minimum: u32,
40        maximum: u32,
41    },
42    ReadyCapacity {
43        files: u32,
44        ready: u32,
45        maximum: u32,
46    },
47}
48
49#[derive(Clone, Copy, Debug, Eq, PartialEq)]
50#[repr(u8)]
51pub enum Claim {
52    DuplicateRoute(route::Id),
53    AcceptedDescriptorsOverflow {
54        current: u32,
55        added: u32,
56    },
57    OutboundDescriptorsOverflow {
58        current: u32,
59        added: u32,
60    },
61    DescriptorConnectionsOutOfRange {
62        actual: usize,
63        minimum: usize,
64        maximum: usize,
65    },
66    ReceiveEntriesOverflow {
67        current: u32,
68        added: u32,
69    },
70    ReceiveEntriesPowerOfTwoOverflow {
71        requested: u32,
72    },
73    ReceiveEntriesTooLarge {
74        actual: usize,
75        maximum: usize,
76    },
77    ResidentDomainsOverflow(settings::DomainSum),
78    QueueSubmissionsPowerOfTwoOverflow {
79        requested: u32,
80    },
81    SchedulerReadyOverflow(slots::Sum),
82    SchedulerTimersOverflow(slots::Sum),
83    Layout(Config),
84}
85
86impl From<Config> for Claim {
87    fn from(source: Config) -> Self {
88        Self::Layout(source)
89    }
90}
91
92impl From<settings::DomainSum> for Claim {
93    fn from(source: settings::DomainSum) -> Self {
94        Self::ResidentDomainsOverflow(source)
95    }
96}
97
98impl From<table::Invalid> for Claim {
99    fn from(source: table::Invalid) -> Self {
100        Self::DescriptorConnectionsOutOfRange {
101            actual: source.actual,
102            minimum: source.minimum,
103            maximum: source.maximum,
104        }
105    }
106}