claude_agent/models/
provider.rs1use 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}