summary refs log tree commit diff
path: root/msg_socket/src/msg_on_socket.rs
diff options
context:
space:
mode:
Diffstat (limited to 'msg_socket/src/msg_on_socket.rs')
-rw-r--r--msg_socket/src/msg_on_socket.rs25
1 files changed, 25 insertions, 0 deletions
diff --git a/msg_socket/src/msg_on_socket.rs b/msg_socket/src/msg_on_socket.rs
index cf3aad0..cf5e528 100644
--- a/msg_socket/src/msg_on_socket.rs
+++ b/msg_socket/src/msg_on_socket.rs
@@ -257,6 +257,31 @@ impl MsgOnSocket for usize {
     }
 }
 
+// Encode bool as a u8 of value 0 or 1
+impl MsgOnSocket for bool {
+    fn msg_size() -> usize {
+        std::mem::size_of::<u8>()
+    }
+    unsafe fn read_from_buffer(buffer: &[u8], _fds: &[RawFd]) -> MsgResult<(Self, usize)> {
+        if buffer.len() < std::mem::size_of::<u8>() {
+            return Err(MsgError::WrongMsgBufferSize);
+        }
+        let t: u8 = buffer[0];
+        match t {
+            0 => Ok((false, 0)),
+            1 => Ok((true, 0)),
+            _ => Err(MsgError::InvalidType),
+        }
+    }
+    fn write_to_buffer(&self, buffer: &mut [u8], _fds: &mut [RawFd]) -> MsgResult<usize> {
+        if buffer.len() < std::mem::size_of::<u8>() {
+            return Err(MsgError::WrongMsgBufferSize);
+        }
+        buffer[0] = *self as u8;
+        Ok(0)
+    }
+}
+
 macro_rules! le_impl {
     ($type:ident, $le_type:ident) => {
         impl MsgOnSocket for $type {