Skip to content
Snippets Groups Projects
Select Git revision
  • 8857d591ddb444f1c46b0806e11c66c3b23f7ed3
  • master default protected
2 results

arbitrary.rs

Blame
  • Forked from CATS / ham-cats
    Source project has a limited visibility.
    timestamp.rs NaN GiB
    #[derive(Debug, PartialEq, Eq)]
    pub struct Timestamp(u64);
    
    impl Timestamp {
        /// Returns none if the given unix timestamp doesn't fit in 5 bytes
        pub fn new(unix_time: u64) -> Option<Self> {
            // must fit in 5 bytes
            if unix_time > (1 << (5 * 8)) - 1 {
                return None;
            }
    
            Some(Self(unix_time))
        }
    
        pub fn unix_time(&self) -> u64 {
            self.0
        }
    
        /// Returns none if there is not enough space in the buffer
        pub fn encode<'a>(&self, buf: &'a mut [u8]) -> Option<&'a [u8]> {
            if buf.len() < 6 {
                return None;
            }
    
            buf[0] = 5;
            buf[1..6].copy_from_slice(&self.0.to_le_bytes()[0..5]);
    
            Some(&buf[0..6])
        }
    
        pub fn decode(data: &[u8]) -> Option<Self> {
            if data.len() < 6 {
                return None;
            }
            if data[0] != 5 {
                return None;
            }
    
            let mut extended_data = [0; 8];
            extended_data[0..5].copy_from_slice(&data[1..6]);
    
            Some(Self(u64::from_le_bytes(extended_data)))
        }
    }