claude_agent/models/
provider.rs

1use serde::{Deserialize, Serialize};
2use std::env;
3
4#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
5#[serde(rename_all = "lowercase")]
6pub enum CloudProvider {
7    #[default]
8    Anthropic,
9    Bedrock,
10    Vertex,
11    Foundry,
12}
13
14impl CloudProvider {
15    pub fn from_env() -> Self {
16        if env::var("CLAUDE_CODE_USE_BEDROCK").is_ok() {
17            Self::Bedrock
18        } else if env::var("CLAUDE_CODE_USE_VERTEX").is_ok() {
19            Self::Vertex
20        } else if env::var("CLAUDE_CODE_USE_FOUNDRY").is_ok() {
21            Self::Foundry
22        } else {
23            Self::Anthropic
24        }
25    }
26}
27
28#[derive(Debug, Clone, Default, Serialize, Deserialize)]
29pub struct ProviderIds {
30    pub anthropic: Option<String>,
31    pub bedrock: Option<String>,
32    pub vertex: Option<String>,
33    pub foundry: Option<String>,
34}
35
36impl ProviderIds {
37    pub fn for_provider(&self, provider: CloudProvider) -> Option<&str> {
38        match provider {
39            CloudProvider::Anthropic => self.anthropic.as_deref(),
40            CloudProvider::Bedrock => self.bedrock.as_deref(),
41            CloudProvider::Vertex => self.vertex.as_deref(),
42            CloudProvider::Foundry => self.foundry.as_deref(),
43        }
44    }
45}