use url::Url;
use super::ApiKey;
const DEFAULT_GEMINI_BASE_URL: &str = "https://generativelanguage.googleapis.com";
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub enum GeminiServiceTier {
#[default]
Standard,
Flex,
Priority,
}
#[derive(Clone)]
pub struct GeminiConfig {
api_key: ApiKey,
base_url: Url,
service_tier: GeminiServiceTier,
}
impl GeminiConfig {
#[must_use]
pub fn new(api_key: ApiKey) -> Self {
Self {
api_key,
base_url: Url::parse(DEFAULT_GEMINI_BASE_URL)
.expect("crate-owned Gemini base URL should parse"),
service_tier: GeminiServiceTier::Standard,
}
}
#[must_use]
pub fn with_base_url(mut self, base_url: Url) -> Self {
self.base_url = base_url;
self
}
#[must_use]
pub fn with_service_tier(mut self, service_tier: GeminiServiceTier) -> Self {
self.service_tier = service_tier;
self
}
pub(crate) fn api_key(&self) -> &ApiKey {
&self.api_key
}
pub(crate) fn base_url(&self) -> &Url {
&self.base_url
}
pub(crate) fn service_tier(&self) -> GeminiServiceTier {
self.service_tier
}
}