| use codex_config::AbsolutePathBuf; |
| use codex_config::CloudConfigBundle; |
| use codex_config::CloudConfigBundleLayers; |
| use codex_config::CloudConfigBundleLoadError; |
| use codex_config::CloudConfigBundleLoadErrorCode; |
| use codex_config::compose_requirements; |
| use codex_config::config_toml::validate_model_providers; |
|
|
| pub(crate) fn validate_bundle( |
| bundle: &CloudConfigBundle, |
| base_dir: &AbsolutePathBuf, |
| ) -> Result<(), CloudConfigBundleLoadError> { |
| let bundle_layers = |
| CloudConfigBundleLayers::from_bundle(bundle.clone(), base_dir).map_err(|err| { |
| CloudConfigBundleLoadError::new( |
| CloudConfigBundleLoadErrorCode::InvalidBundle, |
| None, |
| format!("invalid cloud config bundle: {err}"), |
| ) |
| })?; |
| let CloudConfigBundleLayers { |
| enterprise_managed_config: _, |
| enterprise_managed_requirements, |
| } = bundle_layers; |
|
|
| let requirements = compose_requirements(enterprise_managed_requirements).map_err(|err| { |
| CloudConfigBundleLoadError::new( |
| CloudConfigBundleLoadErrorCode::InvalidBundle, |
| None, |
| format!("invalid cloud config bundle: {err}"), |
| ) |
| })?; |
| if let Some(providers) = requirements.and_then(|requirements| requirements.model_providers) { |
| validate_model_providers(&providers).map_err(|err| { |
| CloudConfigBundleLoadError::new( |
| CloudConfigBundleLoadErrorCode::InvalidBundle, |
| None, |
| format!("invalid cloud config bundle: {err}"), |
| ) |
| })?; |
| } |
|
|
| Ok(()) |
| } |
|
|
| #[cfg(test)] |
| #[path = "validation_tests.rs"] |
| mod tests; |
|
|