tradier 0.1.1

This project involves the development of a Rust library for managing trades and market data using the Tradier broker API. The main objective is to provide an efficient and secure interface for executing trades, retrieving real-time quotes, managing portfolios, and accessing historical market data. The library focuses on leveraging Rust's performance and concurrency advantages, enabling integration into high-frequency trading applications and data-intensive financial processing.
Documentation
use serde::Deserialize;

#[derive(Debug, Deserialize, PartialEq)]
#[serde(untagged)]
pub enum OneOrMany<T> {
    One(T),
    Many(Vec<T>),
}

impl<T> OneOrMany<T> {
    pub fn into_vec(self) -> Vec<T> {
        match self {
            OneOrMany::One(thing) => vec![thing],
            OneOrMany::Many(things) => things,
        }
    }
}

impl<T> Default for OneOrMany<T> {
    fn default() -> Self {
        OneOrMany::Many(Vec::new())
    }
}

#[cfg(test)]
mod test {
    use super::*;

    #[derive(Debug, Deserialize)]
    struct Test {
        items: OneOrMany<i32>,
    }

    #[test]
    fn shold_turn_single_item_into_vec_of_size_one() {
        let thing = OneOrMany::One(4);
        assert_eq!(thing.into_vec().len(), 1);
    }

    #[test]
    fn should_turn_many_items_into_vec_with_length_greater_than_one() {
        let things = OneOrMany::Many(vec![1, 2, 3, 4, 5]);

        assert_eq!(things.into_vec().len(), 5);
    }

    #[test]
    fn should_deserialize_correctly() {
        let serialized_single = serde_json::json!({"items": 5});
        let serialized_many = serde_json::json!({"items": [1, 2, 3]});

        let actual_deserialized = serde_json::from_value::<Test>(serialized_single);
        assert!(actual_deserialized.is_ok());
        assert_eq!(actual_deserialized.unwrap().items.into_vec().len(), 1);

        let actual_deserialized = serde_json::from_value::<Test>(serialized_many);
        assert!(actual_deserialized.is_ok());
        assert_eq!(actual_deserialized.unwrap().items.into_vec().len(), 3);
    }

    #[test]
    fn should_deserialize_empty_correctly() {
        let serialized_empty_array = serde_json::json!({"items": []});

        let actual_deserialized = serde_json::from_value::<Test>(serialized_empty_array);
        assert!(actual_deserialized.is_ok());
        assert!(actual_deserialized.unwrap().items.into_vec().is_empty());
    }
}