sel4/
message_info.rs
1use crate::{newtype_methods, sys, Word};
8
9#[derive(Debug, Clone, PartialEq, Eq)]
11pub struct MessageInfo(sys::seL4_MessageInfo);
12
13impl MessageInfo {
14 newtype_methods!(pub sys::seL4_MessageInfo);
15
16 pub fn new(label: Word, caps_unwrapped: usize, extra_caps: usize, length: usize) -> Self {
17 Self::from_inner(sys::seL4_MessageInfo::new(
18 label,
19 caps_unwrapped.try_into().unwrap(),
20 extra_caps.try_into().unwrap(),
21 length.try_into().unwrap(),
22 ))
23 }
24
25 pub fn label(&self) -> Word {
26 self.inner().get_label()
27 }
28
29 pub const fn label_width() -> usize {
30 sys::seL4_MessageInfo::width_of_label()
31 }
32
33 pub fn caps_unwrapped(&self) -> usize {
34 self.inner().get_capsUnwrapped().try_into().unwrap()
35 }
36
37 pub fn extra_caps(&self) -> usize {
38 self.inner().get_extraCaps().try_into().unwrap()
39 }
40
41 pub fn length(&self) -> usize {
42 self.inner().get_length().try_into().unwrap()
43 }
44}
45
46impl From<MessageInfoBuilder> for MessageInfo {
47 fn from(builder: MessageInfoBuilder) -> Self {
48 builder.build()
49 }
50}
51
52#[derive(Debug, Copy, Clone, PartialEq, Eq, Default)]
54pub struct MessageInfoBuilder {
55 label: Word,
56 caps_unwrapped: usize,
57 extra_caps: usize,
58 length: usize,
59}
60
61impl MessageInfoBuilder {
62 pub fn build(self) -> MessageInfo {
63 MessageInfo::new(
64 self.label,
65 self.caps_unwrapped,
66 self.extra_caps,
67 self.length,
68 )
69 }
70
71 #[must_use]
72 pub fn label(mut self, label: Word) -> Self {
73 self.label = label;
74 self
75 }
76
77 #[must_use]
78 pub fn caps_unwrapped(mut self, caps_unwrapped: usize) -> Self {
79 self.caps_unwrapped = caps_unwrapped;
80 self
81 }
82
83 #[must_use]
84 pub fn extra_caps(mut self, extra_caps: usize) -> Self {
85 self.extra_caps = extra_caps;
86 self
87 }
88
89 #[must_use]
90 pub fn length(mut self, length: usize) -> Self {
91 self.length = length;
92 self
93 }
94}