rg3d/resource/fbx/document/
attribute.rs1use std::fmt::Formatter;
2
3pub enum FbxAttribute {
4 Double(f64),
5 Float(f32),
6 Integer(i32),
7 Long(i64),
8 Bool(bool),
9 String(String), }
11
12impl std::fmt::Display for FbxAttribute {
13 fn fmt(&self, f: &mut Formatter) -> Result<(), std::fmt::Error> {
14 match self {
15 FbxAttribute::Double(double) => write!(f, "{}", double),
16 FbxAttribute::Float(float) => write!(f, "{}", float),
17 FbxAttribute::Integer(integer) => write!(f, "{}", integer),
18 FbxAttribute::Long(long) => write!(f, "{}", long),
19 FbxAttribute::Bool(boolean) => write!(f, "{}", boolean),
20 FbxAttribute::String(string) => write!(f, "{}", string),
21 }
22 }
23}
24
25impl FbxAttribute {
26 pub fn as_i32(&self) -> Result<i32, String> {
27 match self {
28 FbxAttribute::Double(val) => Ok(*val as i32),
29 FbxAttribute::Float(val) => Ok(*val as i32),
30 FbxAttribute::Integer(val) => Ok(*val),
31 FbxAttribute::Long(val) => Ok(*val as i32),
32 FbxAttribute::Bool(val) => Ok(*val as i32),
33 FbxAttribute::String(val) => match val.parse::<i32>() {
34 Ok(i) => Ok(i),
35 Err(_) => Err(format!("Unable to convert string {} to i32", val)),
36 },
37 }
38 }
39
40 pub fn as_i64(&self) -> Result<i64, String> {
41 match self {
42 FbxAttribute::Double(val) => Ok(*val as i64),
43 FbxAttribute::Float(val) => Ok(*val as i64),
44 FbxAttribute::Integer(val) => Ok(i64::from(*val)),
45 FbxAttribute::Long(val) => Ok(*val as i64),
46 FbxAttribute::Bool(val) => Ok(*val as i64),
47 FbxAttribute::String(val) => match val.parse::<i64>() {
48 Ok(i) => Ok(i),
49 Err(_) => Err(format!("Unable to convert string {} to i64", val)),
50 },
51 }
52 }
53
54 pub fn as_f64(&self) -> Result<f64, String> {
55 match self {
56 FbxAttribute::Double(val) => Ok(*val),
57 FbxAttribute::Float(val) => Ok(f64::from(*val)),
58 FbxAttribute::Integer(val) => Ok(f64::from(*val)),
59 FbxAttribute::Long(val) => Ok(*val as f64),
60 FbxAttribute::Bool(val) => Ok((*val as i64) as f64),
61 FbxAttribute::String(val) => match val.parse::<f64>() {
62 Ok(i) => Ok(i),
63 Err(_) => Err(format!("Unable to convert string {} to f64", val)),
64 },
65 }
66 }
67
68 pub fn as_f32(&self) -> Result<f32, String> {
69 match self {
70 FbxAttribute::Double(val) => Ok(*val as f32),
71 FbxAttribute::Float(val) => Ok(*val),
72 FbxAttribute::Integer(val) => Ok(*val as f32),
73 FbxAttribute::Long(val) => Ok(*val as f32),
74 FbxAttribute::Bool(val) => Ok((*val as i32) as f32),
75 FbxAttribute::String(val) => match val.parse::<f32>() {
76 Ok(i) => Ok(i),
77 Err(_) => Err(format!("Unable to convert string {} to f32", val)),
78 },
79 }
80 }
81
82 pub fn as_string(&self) -> String {
83 match self {
84 FbxAttribute::Double(val) => val.to_string(),
85 FbxAttribute::Float(val) => val.to_string(),
86 FbxAttribute::Integer(val) => val.to_string(),
87 FbxAttribute::Long(val) => val.to_string(),
88 FbxAttribute::Bool(val) => val.to_string(),
89 FbxAttribute::String(val) => val.clone(),
90 }
91 }
92}