ai-providers 0.0.1

A comprehensive collection of AI provider implementations, schematics, and API integrations for various AI services
Documentation
use std::str::FromStr;

use serde::{Deserialize, Serialize};

use crate::openai::errors::ConversionError;

#[derive(Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum ServiceTier {
    Auto,
    Default,
    Flex,
}

impl FromStr for ServiceTier {
    type Err = ConversionError;

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        match s {
            "auto" => Ok(ServiceTier::Auto),
            "default" => Ok(ServiceTier::Default),
            "flex" => Ok(ServiceTier::Flex),
            _ => Err(ConversionError::FromStr(s.to_string())),
        }
    }
}

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

    #[test]
    fn it_converts_str_to_service_tier() {
        let values = ["auto", "default", "flex"];
        let expected_values = [ServiceTier::Auto, ServiceTier::Default, ServiceTier::Flex];

        for (index, value) in values.iter().enumerate() {
            assert_eq!(
                ServiceTier::from_str(value).unwrap(),
                expected_values[index]
            );
        }
    }

    #[test]
    fn it_returns_error_when_wrong_service_tier_is_given() {
        let value = "wrong";

        assert_eq!(
            ServiceTier::from_str(value),
            Err(ConversionError::FromStr(value.to_string()))
        );
    }

    #[test]
    fn test_json_values() {
        let service_tier = ServiceTier::Auto;
        let json_value = serde_json::to_value(&service_tier).unwrap();
        assert_eq!(json_value, serde_json::json!("auto"));
    }
}