You've already forked authentication-service
mirror of
https://github.com/matrix-org/matrix-authentication-service.git
synced 2025-12-10 01:01:09 +03:00
Multiple IANA codegen enhancement
- JWS/JWE algorithms are properly splitted - Enums now have a proper description - They implement FromStr and Display - mas-jose does not reexport mas-iana anymore
This commit is contained in:
@@ -27,8 +27,7 @@ struct File {
|
||||
client: Arc<Client>,
|
||||
registry_name: &'static str,
|
||||
registry_url: &'static str,
|
||||
sections: Vec<&'static str>,
|
||||
sources: Vec<&'static str>,
|
||||
sections: Vec<Section>,
|
||||
items: HashMap<&'static str, Vec<EnumMember>>,
|
||||
}
|
||||
|
||||
@@ -46,7 +45,6 @@ impl File {
|
||||
client,
|
||||
registry_name,
|
||||
registry_url,
|
||||
sources: Vec::new(),
|
||||
sections: Vec::new(),
|
||||
items: HashMap::new(),
|
||||
}
|
||||
@@ -55,8 +53,7 @@ impl File {
|
||||
#[tracing::instrument(skip_all, fields(url))]
|
||||
async fn load<T: EnumEntry>(mut self) -> anyhow::Result<Self> {
|
||||
tracing::Span::current().record("url", &T::URL);
|
||||
self.sections.extend_from_slice(T::SECTIONS);
|
||||
self.sources.push(T::URL);
|
||||
self.sections.extend(T::sections());
|
||||
for (key, value) in T::fetch(&self.client).await? {
|
||||
self.items.entry(key).or_default().push(value);
|
||||
}
|
||||
@@ -99,43 +96,43 @@ impl Display for File {
|
||||
|
||||
//! Enums from the {:?} IANA registry
|
||||
//! See <{}>
|
||||
//!
|
||||
//! Generated from:"#,
|
||||
|
||||
// Do not edit this file manually
|
||||
|
||||
use parse_display::{{Display, FromStr}};
|
||||
use schemars::JsonSchema;
|
||||
use serde::{{Deserialize, Serialize}};"#,
|
||||
self.registry_name, self.registry_url,
|
||||
)?;
|
||||
|
||||
for source in &self.sources {
|
||||
writeln!(f, "//! - <{}>", source)?;
|
||||
}
|
||||
|
||||
writeln!(
|
||||
f,
|
||||
r#"
|
||||
// Do not edit this file manually
|
||||
|
||||
use schemars::JsonSchema;
|
||||
use serde::{{Deserialize, Serialize}};"#
|
||||
)?;
|
||||
|
||||
for key in &self.sections {
|
||||
let list = if let Some(list) = self.items.get(key) {
|
||||
for section in &self.sections {
|
||||
let list = if let Some(list) = self.items.get(section.key) {
|
||||
list
|
||||
} else {
|
||||
continue;
|
||||
};
|
||||
|
||||
writeln!(f)?;
|
||||
writeln!(
|
||||
write!(
|
||||
f,
|
||||
"#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)]"
|
||||
r#"
|
||||
/// {}
|
||||
///
|
||||
/// Source: <{}>
|
||||
#[derive(
|
||||
Debug, Clone, Copy, PartialEq, Eq, Hash, Display, FromStr, Serialize, Deserialize, JsonSchema,
|
||||
)]
|
||||
pub enum {} {{"#,
|
||||
section.doc,
|
||||
section.url.unwrap(),
|
||||
section.key,
|
||||
)?;
|
||||
write!(f, "pub enum {} {{", key)?;
|
||||
for member in list {
|
||||
writeln!(f)?;
|
||||
if let Some(description) = &member.description {
|
||||
writeln!(f, " /// {}", description)?;
|
||||
}
|
||||
writeln!(f, " #[serde(rename = \"{}\")]", member.value)?;
|
||||
writeln!(f, " #[display(\"{}\")]", member.value)?;
|
||||
writeln!(f, " {},", member.enum_name)?;
|
||||
}
|
||||
writeln!(f, "}}")?;
|
||||
|
||||
Reference in New Issue
Block a user