sel4_shared_ring_buffer/
roles.rs
1use crate::InitializationStrategy;
8
9pub enum Provide {}
10pub enum Use {}
11
12pub trait RingBuffersRole: RingBuffersRoleSealed {
13 type FreeRole: RingBufferRole;
14 type UsedRole: RingBufferRole;
15
16 const ROLE: RingBuffersRoleValue;
17
18 fn default_initialization_strategy() -> InitializationStrategy;
19}
20
21impl RingBuffersRole for Provide {
22 type FreeRole = Write;
23 type UsedRole = Read;
24
25 const ROLE: RingBuffersRoleValue = RingBuffersRoleValue::Provide;
26
27 fn default_initialization_strategy() -> InitializationStrategy {
28 InitializationStrategy::UseAndWriteState(Default::default())
29 }
30}
31
32impl RingBuffersRole for Use {
33 type FreeRole = Read;
34 type UsedRole = Write;
35
36 const ROLE: RingBuffersRoleValue = RingBuffersRoleValue::Use;
37
38 fn default_initialization_strategy() -> InitializationStrategy {
39 InitializationStrategy::ReadState
40 }
41}
42
43#[derive(Debug, Copy, Clone, PartialOrd, Ord, PartialEq, Eq, Hash)]
44pub enum RingBuffersRoleValue {
45 Provide,
46 Use,
47}
48
49impl RingBuffersRoleValue {
50 pub fn is_provide(self) -> bool {
51 self == Self::Provide
52 }
53
54 pub fn is_use(self) -> bool {
55 self == Self::Use
56 }
57}
58
59pub enum Write {}
60pub enum Read {}
61
62pub trait RingBufferRole: RingBufferRoleSealed {
63 const ROLE: RingBufferRoleValue;
64}
65
66impl RingBufferRole for Write {
67 const ROLE: RingBufferRoleValue = RingBufferRoleValue::Write;
68}
69
70impl RingBufferRole for Read {
71 const ROLE: RingBufferRoleValue = RingBufferRoleValue::Read;
72}
73
74#[derive(Debug, Copy, Clone, PartialOrd, Ord, PartialEq, Eq, Hash)]
75pub enum RingBufferRoleValue {
76 Write,
77 Read,
78}
79
80impl RingBufferRoleValue {
81 pub fn is_write(self) -> bool {
82 self == Self::Write
83 }
84
85 pub fn is_read(self) -> bool {
86 self == Self::Read
87 }
88}
89
90use sealing::{RingBufferRoleSealed, RingBuffersRoleSealed};
91
92mod sealing {
93 use super::*;
94
95 pub trait RingBuffersRoleSealed {}
96
97 impl RingBuffersRoleSealed for Provide {}
98 impl RingBuffersRoleSealed for Use {}
99
100 pub trait RingBufferRoleSealed {}
101
102 impl RingBufferRoleSealed for Write {}
103 impl RingBufferRoleSealed for Read {}
104}