bnr_xfs/capabilities/
default_rollback_position.rs

1use std::fmt;
2
3use crate::{
4    impl_xfs_enum,
5    status::{CDR_POS_BOTTOM, CDR_POS_TOP},
6};
7
8/// Represents a CDR position
9#[repr(u32)]
10#[derive(Clone, Copy, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
11pub enum DefaultRollbackPosition {
12    /// Inlet position
13    Top = CDR_POS_TOP,
14    /// Outlet position
15    #[default]
16    Bottom = CDR_POS_BOTTOM,
17}
18
19impl DefaultRollbackPosition {
20    /// Creates a new [DefaultRollbackPosition].
21    pub const fn new() -> Self {
22        Self::Bottom
23    }
24
25    /// Creates a new [DefaultRollbackPosition] from the provided parameter.
26    pub const fn create(val: u32) -> Self {
27        match val {
28            CDR_POS_BOTTOM => Self::Bottom,
29            CDR_POS_TOP => Self::Top,
30            _ => Self::Bottom,
31        }
32    }
33}
34
35impl From<&DefaultRollbackPosition> for &'static str {
36    fn from(val: &DefaultRollbackPosition) -> Self {
37        match val {
38            DefaultRollbackPosition::Bottom => "bottom",
39            DefaultRollbackPosition::Top => "top",
40        }
41    }
42}
43
44impl From<DefaultRollbackPosition> for &'static str {
45    fn from(val: DefaultRollbackPosition) -> Self {
46        (&val).into()
47    }
48}
49
50impl fmt::Display for DefaultRollbackPosition {
51    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
52        write!(f, r#""{}""#, <&str>::from(self))
53    }
54}
55
56impl_xfs_enum!(DefaultRollbackPosition, "defaultRollbackPosition");