bnr_xfs/currency/
exponent.rs1use std::fmt;
2
3use crate::xfs::{value::XfsValue, xfs_struct::XfsMember};
4use crate::{Error, Result};
5
6#[repr(C)]
8#[derive(Clone, Copy, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
9pub struct Exponent(i32);
10
11impl Exponent {
12 pub const fn new() -> Self {
14 Self(0)
15 }
16
17 pub const fn create(val: i32) -> Self {
19 Self(val)
20 }
21
22 pub const fn xfs_name() -> &'static str {
24 "exponent"
25 }
26
27 pub const fn inner(&self) -> i32 {
29 self.0
30 }
31
32 pub fn set_inner(&mut self, val: i32) {
34 self.0 = val;
35 }
36
37 pub fn into_inner(self) -> i32 {
39 self.0
40 }
41}
42
43impl From<&Exponent> for i32 {
44 fn from(val: &Exponent) -> Self {
45 val.inner()
46 }
47}
48
49impl From<Exponent> for i32 {
50 fn from(val: Exponent) -> Self {
51 val.into_inner()
52 }
53}
54
55impl From<&Exponent> for u32 {
56 fn from(val: &Exponent) -> Self {
57 val.inner() as u32
58 }
59}
60
61impl From<Exponent> for u32 {
62 fn from(val: Exponent) -> Self {
63 val.into_inner() as u32
64 }
65}
66
67impl From<u32> for Exponent {
68 fn from(val: u32) -> Self {
69 (val as i32).into()
70 }
71}
72
73impl From<&u32> for Exponent {
74 fn from(val: &u32) -> Self {
75 (*val).into()
76 }
77}
78
79impl From<i32> for Exponent {
80 fn from(val: i32) -> Self {
81 Self::create(val)
82 }
83}
84
85impl From<&i32> for Exponent {
86 fn from(val: &i32) -> Self {
87 (*val).into()
88 }
89}
90
91impl From<&Exponent> for XfsValue {
92 fn from(val: &Exponent) -> Self {
93 Self::new().with_i4(val.inner())
94 }
95}
96
97impl From<Exponent> for XfsValue {
98 fn from(val: Exponent) -> Self {
99 (&val).into()
100 }
101}
102
103impl TryFrom<&XfsValue> for Exponent {
104 type Error = Error;
105
106 fn try_from(val: &XfsValue) -> Result<Self> {
107 Ok(val
108 .i4()
109 .ok_or(Error::Xfs(format!(
110 "Expected Exponent XfsValue, have: {val}"
111 )))?
112 .into())
113 }
114}
115
116impl From<&Exponent> for XfsMember {
117 fn from(val: &Exponent) -> Self {
118 Self::create(Exponent::xfs_name(), val.into())
119 }
120}
121
122impl From<Exponent> for XfsMember {
123 fn from(val: Exponent) -> Self {
124 (&val).into()
125 }
126}
127
128impl TryFrom<&XfsMember> for Exponent {
129 type Error = Error;
130
131 fn try_from(val: &XfsMember) -> Result<Self> {
132 match (val.name(), val.value().i4()) {
133 (n, Some(v)) if n == Exponent::xfs_name() => Ok(v.into()),
134 _ => Err(Error::Xfs(format!(
135 "Expected Exponent XfsMember, have: {val}"
136 ))),
137 }
138 }
139}
140
141impl TryFrom<XfsMember> for Exponent {
142 type Error = Error;
143
144 fn try_from(val: XfsMember) -> Result<Self> {
145 (&val).try_into()
146 }
147}
148
149impl fmt::Display for Exponent {
150 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
151 write!(f, "{}", self.inner())
152 }
153}