tronz_primitives/
resource.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, Serialize, Deserialize)]
10#[repr(i32)]
11pub enum ResourceCode {
12 Bandwidth = 0,
14 Energy = 1,
16 TronPower = 2,
18}
19
20impl ResourceCode {
21 pub const fn as_i32(self) -> i32 {
23 self as i32
24 }
25
26 pub const fn from_i32(value: i32) -> Option<Self> {
28 match value {
29 0 => Some(ResourceCode::Bandwidth),
30 1 => Some(ResourceCode::Energy),
31 2 => Some(ResourceCode::TronPower),
32 _ => None,
33 }
34 }
35}
36
37impl Default for ResourceCode {
38 fn default() -> Self {
41 ResourceCode::Energy
42 }
43}
44
45#[cfg(test)]
46mod tests {
47 use super::*;
48
49 #[test]
50 fn discriminants() {
51 assert_eq!(ResourceCode::Bandwidth.as_i32(), 0);
52 assert_eq!(ResourceCode::Energy.as_i32(), 1);
53 assert_eq!(ResourceCode::TronPower.as_i32(), 2);
54 assert_eq!(ResourceCode::from_i32(1), Some(ResourceCode::Energy));
55 assert_eq!(ResourceCode::from_i32(9), None);
56 assert_eq!(ResourceCode::default(), ResourceCode::Energy);
57 }
58}