providers-kit 0.0.2

Portable enum-dispatch Kit over multiple model provider APIs.
Documentation
use serde::{Deserialize, Serialize};

use crate::config::GeminiServiceTier;

#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub(crate) enum GeminiNativeServiceTier {
    Standard,
    Flex,
    Priority,
}

impl GeminiNativeServiceTier {
    pub(crate) fn as_rest_value(self) -> &'static str {
        match self {
            Self::Standard => "standard",
            Self::Flex => "flex",
            Self::Priority => "priority",
        }
    }
}

impl From<GeminiServiceTier> for GeminiNativeServiceTier {
    fn from(value: GeminiServiceTier) -> Self {
        match value {
            GeminiServiceTier::Standard => Self::Standard,
            GeminiServiceTier::Flex => Self::Flex,
            GeminiServiceTier::Priority => Self::Priority,
        }
    }
}

pub(crate) fn render_service_tier(value: GeminiServiceTier) -> Option<String> {
    match value {
        GeminiServiceTier::Standard => None,
        GeminiServiceTier::Flex => Some(GeminiNativeServiceTier::Flex.as_rest_value().to_string()),
        GeminiServiceTier::Priority => Some(
            GeminiNativeServiceTier::Priority
                .as_rest_value()
                .to_string(),
        ),
    }
}