use super::{
BlockKey, GrammarError, PROVIDERS_YAML, ROLES, RoleModel, block_key, entries, field, set_field,
};
pub fn roles(providers_yaml: &str) -> Vec<RoleModel> {
let lines: Vec<&str> = providers_yaml.lines().collect();
let BlockKey::At(at) = block_key(&lines, ROLES) else {
return Vec::new();
};
entries(&lines, at)
.into_iter()
.filter_map(|(role, i)| {
Some(RoleModel {
role,
provider: field(&lines, i, "provider")?.0,
model: field(&lines, i, "model")?.0,
})
})
.collect()
}
pub fn set_role_model(
providers_yaml: &str,
role: &str,
provider: &str,
model: &str,
) -> Result<String, GrammarError> {
let out = set_field(
PROVIDERS_YAML,
providers_yaml,
ROLES,
role,
"provider",
provider,
)?;
set_field(PROVIDERS_YAML, &out, ROLES, role, "model", model)
}