in compiler-rs/clients_schema_to_openapi/src/schemas.rs [403:437]
fn convert_enum(&mut self, enumm: &Enum) -> anyhow::Result<Schema> {
// Collect all members and their aliases
let enum_values = enumm.members.iter()
.flat_map(|m|
std::iter::once(m.name.clone())
.chain(m.aliases.iter().cloned())
)
.map(Some) // enumeration below is a Vec<Option<String>>
.collect::<Vec<_>>();
let result = StringType {
format: Default::default(),
pattern: None,
enumeration: enum_values,
min_length: None,
max_length: None,
};
// Open enumeration: keep the value list for reference and also allow any string
let mut schema = if enumm.is_open {
AnyOf {
any_of: vec![
result.into_schema_ref(),
StringType::default().into_schema_ref(),
]
}.into_schema()
} else {
result.into_schema()
};
self.fill_data_with_base(&mut schema.schema_data, &enumm.base);
Ok(schema)
}