File size: 1,068 Bytes
afa0cbf | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | //! Caller-specific explicit access programs advertised by the model catalog.
//!
//! Discovery metadata does not grant access; inference still enforces authorization.
use schemars::JsonSchema;
use serde::Deserialize;
use serde::Deserializer;
use serde::Serialize;
use ts_rs::TS;
use crate::turn_input::CyberAccessProgram;
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, TS, JsonSchema)]
pub struct ModelAccessPrograms {
/// Accepted explicit selections. An empty list is distinct from missing metadata.
#[serde(deserialize_with = "deserialize_known_cyber_access_programs")]
pub cyber: Vec<CyberAccessProgram>,
}
fn deserialize_known_cyber_access_programs<'de, D>(
deserializer: D,
) -> Result<Vec<CyberAccessProgram>, D::Error>
where
D: Deserializer<'de>,
{
// New server programs must not prevent older clients from loading the catalog.
Ok(Vec::<String>::deserialize(deserializer)?
.into_iter()
.filter_map(|program| serde_json::from_value(serde_json::Value::String(program)).ok())
.collect())
}
|