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