fn convert_enum()

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