feat: Added iced-ui and updated typegen for docs
Some checks failed
build / checks-matrix (push) Has been cancelled
build / checks-build (push) Has been cancelled
build / codecov (push) Has been cancelled
docs / docs (push) Has been cancelled

This commit is contained in:
uttarayan21
2025-11-18 16:45:43 +05:30
parent 729a0479ec
commit e50e08dc57
16 changed files with 3003 additions and 526 deletions

View File

@@ -60,14 +60,22 @@ pub struct Property {
impl Property {
pub fn to_string(&self) -> String {
let out = match self._type {
Some(Types::String) => "String".to_string(),
Some(Types::String) => match self.format.as_deref() {
Some("uuid") => "uuid::Uuid".to_string(),
Some("date-time") => "jiff::Zoned".to_string(),
_ => "String".to_string(),
},
Some(Types::Integer) => match self.format.as_deref() {
Some("int32") => "i32".to_string(),
Some("int64") => "i64".to_string(),
_ => "i32".to_string(),
},
Some(Types::Boolean) => "bool".to_string(),
Some(Types::Number) => "f64".to_string(),
Some(Types::Number) => match self.format.as_deref() {
Some("double") => "f64".to_string(),
Some("float") => "f32".to_string(),
_ => "f64".to_string(),
},
Some(Types::Array) => {
if let Some(ref items) = self.items {
format!("Vec<{}>", items.to_string())
@@ -102,6 +110,9 @@ impl Property {
out
}
}
pub fn description(&self) -> Option<String> {
self.description.clone()
}
}
#[derive(Debug, serde::Serialize, serde::Deserialize, Clone)]
@@ -144,6 +155,12 @@ fn main() {
.map(|(name, _type)| {
let og_name = name.clone();
let name = modify_keyword(&name.to_snake_case());
let _type_desc = _type.description();
let _type_desc = if let Some(desc) = &_type_desc {
Some(format!(" {}", desc))
} else {
None
};
let _type = _type.to_string();
let _type = if _type.contains(key) {
_type.replace(&format!("<{}>", key), format!("<Box<{}>>", key).as_str())
@@ -151,8 +168,15 @@ fn main() {
_type
};
syn::Field {
attrs: syn::parse_quote! {
#[serde(rename = #og_name)]
attrs: if let Some(desc) = _type_desc {
syn::parse_quote! {
#[doc = #desc]
#[serde(rename = #og_name)]
}
} else {
syn::parse_quote! {
#[serde(rename = #og_name)]
}
},
mutability: syn::FieldMutability::None,
vis: syn::Visibility::Public(syn::Token![pub](
@@ -165,13 +189,26 @@ fn main() {
})
.collect::<Vec<syn::Field>>();
let key = modify_keyword(key);
let desc = value.description.clone();
let key = syn::Ident::new(&key.to_pascal_case(), proc_macro2::Span::call_site());
let tokens = quote::quote! {
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct #key {
#(#fields),*
let tokens = if let Some(desc) = desc {
let desc = format!(" {}", desc);
quote::quote! {
#[doc = #desc]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct #key {
#(#fields),*
}
}
} else {
quote::quote! {
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct #key {
#(#fields),*
}
}
};
syn::parse2(tokens).expect("Failed to parse struct")
})
.collect();
@@ -196,11 +233,24 @@ fn main() {
.collect::<Vec<syn::Variant>>();
let key = modify_keyword(key);
let key = syn::Ident::new(&key.to_pascal_case(), proc_macro2::Span::call_site());
let tokens = quote::quote! {
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "PascalCase")]
pub enum #key {
#(#variants),*
let desc = value.description.clone();
let tokens = if let Some(desc) = desc {
let desc = format!(" {}", desc);
quote::quote! {
#[doc = #desc]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "PascalCase")]
pub enum #key {
#(#variants),*
}
}
} else {
quote::quote! {
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "PascalCase")]
pub enum #key {
#(#variants),*
}
}
};
syn::parse2(tokens).expect("Failed to parse enum")