bitpanda_csv/trade/
asset_class.rs

1//! # AssetClass
2//!
3//! asset class types
4
5/// Defines the asset class type, which is the asset group on Bitanda
6#[derive(Debug, Deserialize, Copy, Clone, Eq, PartialEq, Hash)]
7pub enum AssetClass {
8    Fiat,
9    #[serde(rename = "Stock (derivative)")]
10    Stock,
11    Cryptocurrency,
12    #[serde(rename = "ETF (derivative)")]
13    Etf,
14    Commodity,
15    Metal,
16}
17
18#[cfg(test)]
19mod test {
20
21    use super::*;
22
23    use pretty_assertions::assert_eq;
24    use std::io::Cursor;
25
26    #[test]
27    fn should_decode_asset_class() {
28        let csv = r#"id,asset_class
290,Fiat
301,Stock (derivative)
312,Cryptocurrency
323,ETF (derivative)
334,Commodity
345,Metal
35"#;
36        let buffer = Cursor::new(csv);
37        let mut reader = csv::Reader::from_reader(buffer);
38        let mut fakes: Vec<AssetClass> = Vec::new();
39        for result in reader.deserialize::<Fake>() {
40            fakes.push(result.expect("failed to decode").asset_class);
41        }
42        assert_eq!(
43            fakes,
44            vec![
45                AssetClass::Fiat,
46                AssetClass::Stock,
47                AssetClass::Cryptocurrency,
48                AssetClass::Etf,
49                AssetClass::Commodity,
50                AssetClass::Metal
51            ]
52        );
53    }
54
55    #[derive(Deserialize)]
56    #[allow(dead_code)]
57    struct Fake {
58        id: u64,
59        asset_class: AssetClass,
60    }
61}