use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(
Debug,
Clone,
Copy,
PartialEq,
Eq,
Hash,
Serialize,
Deserialize,
Default,
JsonSchema,
arbitrary::Arbitrary,
)]
#[serde(rename_all = "snake_case")]
#[schemars(rename = "agent.Upstream")]
pub enum Upstream {
#[schemars(title = "Unknown")]
#[default]
Unknown,
#[schemars(title = "Openrouter")]
Openrouter,
#[schemars(title = "ClaudeAgentSdk")]
ClaudeAgentSdk,
#[schemars(title = "CodexSdk")]
CodexSdk,
#[schemars(title = "Mock")]
Mock,
}
pub mod validate {
use super::Upstream;
pub fn validate(upstreams: &[Upstream]) -> Result<(), String> {
let mut seen = std::collections::HashSet::new();
for upstream in upstreams {
if !seen.insert(upstream) {
return Err(
"`upstreams` contains duplicate entries".to_string()
);
}
}
if seen.contains(&Upstream::Unknown) {
return Err("`upstreams` contains unknown upstream".to_string());
}
Ok(())
}
}