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(())
}
}