pub fn validate_repository_ref(r: &RepositoryRef) -> ValidationResultExpand description
A RepositoryRef is well-formed: a ClusterRepository reference is by name
only, so namespace MUST be absent (ADR §3.2/§3.3). A namespaced Repository
reference may carry a namespace (cross-namespace references are allowed).
use kopiur_api::common::RepositoryRef;
use kopiur_api::validate::validate_repository_ref;
use kopiur_api::ValidationError;
// OK: a namespaced Repository reference may name a namespace.
let ok: RepositoryRef = serde_json::from_value(serde_json::json!({
"kind": "Repository", "name": "nas-primary", "namespace": "backups",
}))
.unwrap();
assert!(validate_repository_ref(&ok).is_ok());
// Err: a ClusterRepository is referenced by name alone — a namespace is forbidden.
let bad: RepositoryRef = serde_json::from_value(serde_json::json!({
"kind": "ClusterRepository", "name": "shared", "namespace": "oops",
}))
.unwrap();
assert_eq!(
validate_repository_ref(&bad).unwrap_err(),
ValidationError::ClusterRepoNamespaceForbidden { namespace: "oops".to_string() },
);