insim_core/
wind.rs

1//! Strongly typed wind strength
2#[cfg(feature = "serde")]
3use serde::Serialize;
4
5use crate::{Decode, Encode};
6
7#[derive(Debug, Default, Clone, Copy)]
8#[cfg_attr(feature = "serde", derive(Serialize))]
9#[repr(u8)]
10/// Wind strength levels within LFS
11pub enum Wind {
12    #[default]
13    /// No wind
14    None = 0,
15    /// Weak wind
16    Weak = 1,
17    /// Strong wind
18    Strong = 2,
19}
20
21impl Decode for Wind {
22    fn decode(buf: &mut bytes::Bytes) -> Result<Self, crate::DecodeError> {
23        match u8::decode(buf)? {
24            0 => Ok(Wind::None),
25            1 => Ok(Self::Weak),
26            2 => Ok(Self::Strong),
27            other => Err(crate::DecodeError::NoVariantMatch {
28                found: other as u64,
29            }),
30        }
31    }
32}
33
34impl Encode for Wind {
35    fn encode(&self, buf: &mut bytes::BytesMut) -> Result<(), crate::EncodeError> {
36        (*self as u8).encode(buf)
37    }
38}