(provider: &opencode_config::ProviderConfig)
| 253 | } |
| 254 | |
| 255 | fn provider_to_bootstrap(provider: &opencode_config::ProviderConfig) -> BootstrapConfigProvider { |
| 256 | let mut options = provider.options.clone().unwrap_or_default(); |
| 257 | if let Some(api_key) = &provider.api_key { |
| 258 | options |
| 259 | .entry("apiKey".to_string()) |
| 260 | .or_insert_with(|| serde_json::Value::String(api_key.clone())); |
| 261 | } |
| 262 | if let Some(base_url) = &provider.base_url { |
| 263 | options |
| 264 | .entry("baseURL".to_string()) |
| 265 | .or_insert_with(|| serde_json::Value::String(base_url.clone())); |
| 266 | } |
| 267 | |
| 268 | let models = provider.models.as_ref().map(|models| { |
| 269 | models |
| 270 | .iter() |
| 271 | .map(|(id, model)| (id.clone(), model_to_bootstrap(id, model))) |
| 272 | .collect() |
| 273 | }); |
| 274 | |
| 275 | BootstrapConfigProvider { |
| 276 | name: provider.name.clone(), |
| 277 | api: provider.base_url.clone(), |
| 278 | npm: provider.npm.clone(), |
| 279 | options: (!options.is_empty()).then_some(options), |
| 280 | models, |
| 281 | blacklist: (!provider.blacklist.is_empty()).then_some(provider.blacklist.clone()), |
| 282 | whitelist: (!provider.whitelist.is_empty()).then_some(provider.whitelist.clone()), |
| 283 | ..Default::default() |
| 284 | } |
| 285 | } |
| 286 | |
| 287 | fn model_to_bootstrap(id: &str, model: &opencode_config::ModelConfig) -> BootstrapConfigModel { |
| 288 | let mut options = HashMap::new(); |
no test coverage detected