fix(codegen): fixed codegen for array path parameters

This commit is contained in:
pyrite 2025-05-27 19:23:19 +02:00
parent e2c4f74242
commit 1deef2150d
Signed by: pyrite
GPG key ID: 7F1BA9170CD35D15
8 changed files with 6393 additions and 6334 deletions

File diff suppressed because it is too large Load diff

View file

@ -317,23 +317,3 @@ impl Enum {
})
}
}
#[cfg(test)]
mod test {
use crate::openapi::schema::OpenApiSchema;
use super::*;
#[test]
fn codegen() {
let schema = OpenApiSchema::read().unwrap();
let revive_setting = schema.components.schemas.get("ReviveSetting").unwrap();
let r#enum = Enum::from_schema("ReviveSetting", revive_setting).unwrap();
let code = r#enum.codegen().unwrap();
panic!("{code}");
}
}

View file

@ -1,8 +1,8 @@
use r#enum::Enum;
use indexmap::IndexMap;
use newtype::Newtype;
use object::Object;
use proc_macro2::TokenStream;
use r#enum::Enum;
use crate::openapi::r#type::OpenApiType;
@ -101,65 +101,6 @@ mod test {
);
}
#[test]
fn resolve_enums() {
let schema = OpenApiSchema::read().unwrap();
let forum_feed_type_schema = schema.components.schemas.get("ForumFeedTypeEnum").unwrap();
let forum_feed_type = resolve(
forum_feed_type_schema,
"ForumFeedTypeEnum",
&schema.components.schemas,
);
assert_eq!(forum_feed_type, Model::Enum(Enum {
name: "ForumFeedType".to_owned(),
description: Some("This represents the type of the activity. Values range from 1 to 8 where:\n * 1 = 'X posted on a thread',\n * 2 = 'X created a thread',\n * 3 = 'X liked your thread',\n * 4 = 'X disliked your thread',\n * 5 = 'X liked your post',\n * 6 = 'X disliked your post',\n * 7 = 'X quoted your post'.".to_owned()),
repr: Some(EnumRepr::U32),
copy: true,
untagged: false,
display: true,
variants: vec![
EnumVariant {
name: "Variant1".to_owned(),
value: r#enum::EnumVariantValue::Repr(1),
..Default::default()
},
EnumVariant {
name: "Variant2".to_owned(),
value: r#enum::EnumVariantValue::Repr(2),
..Default::default()
},
EnumVariant {
name: "Variant3".to_owned(),
value: r#enum::EnumVariantValue::Repr(3),
..Default::default()
},
EnumVariant {
name: "Variant4".to_owned(),
value: r#enum::EnumVariantValue::Repr(4),
..Default::default()
},
EnumVariant {
name: "Variant5".to_owned(),
value: r#enum::EnumVariantValue::Repr(5),
..Default::default()
},
EnumVariant {
name: "Variant6".to_owned(),
value: r#enum::EnumVariantValue::Repr(6),
..Default::default()
},
EnumVariant {
name: "Variant7".to_owned(),
value: r#enum::EnumVariantValue::Repr(7),
..Default::default()
},
]
}))
}
#[test]
fn resolve_all() {
let schema = OpenApiSchema::read().unwrap();

View file

@ -121,24 +121,3 @@ impl Newtype {
Some(body)
}
}
#[cfg(test)]
mod test {
use super::*;
use crate::openapi::schema::OpenApiSchema;
#[test]
fn codegen() {
let schema = OpenApiSchema::read().unwrap();
let user_id = schema.components.schemas.get("UserId").unwrap();
let mut newtype = Newtype::from_schema("UserId", user_id).unwrap();
newtype.description = Some("Description goes here".to_owned());
let code = newtype.codegen().unwrap().to_string();
panic!("{code}");
}
}

View file

@ -207,7 +207,9 @@ impl Property {
let prim = match (schema.r#type, schema.format) {
(Some("integer"), Some("int32")) => PrimitiveType::I32,
(Some("integer"), Some("int64")) => PrimitiveType::I64,
(Some("number"), /* Some("float") */ _) => PrimitiveType::Float,
(Some("number"), /* Some("float") */ _) | (_, Some("float")) => {
PrimitiveType::Float
}
(Some("string"), None) => PrimitiveType::String,
(Some("boolean"), None) => PrimitiveType::Bool,
_ => return None,

View file

@ -2,7 +2,7 @@ use std::fmt::Write;
use heck::ToUpperCamelCase;
use proc_macro2::TokenStream;
use quote::{ToTokens, format_ident, quote};
use quote::{format_ident, quote, ToTokens};
use crate::openapi::parameter::{
OpenApiParameter, OpenApiParameterDefault, OpenApiParameterSchema,
@ -303,7 +303,12 @@ The default value [Self::{}](self::{}#variant.{})"#,
let mut code = inner.codegen().unwrap_or_default();
let name = format_ident!("{}", outer_name);
let inner_ty = items.codegen_type_name(&inner_name);
let inner_ty = if matches!(items.as_ref(), ParameterType::Schema { type_name: _ }) {
let inner_name = format_ident!("{}", inner_name);
quote! { crate::models::#inner_name }
} else {
items.codegen_type_name(&inner_name).to_token_stream()
};
code.extend(quote! {
#[derive(Debug, Clone)]

View file

@ -352,7 +352,13 @@ impl Path {
crate::models::#ty_name
}
}
ParameterType::Array { .. } => param.r#type.codegen_type_name(&param.name),
ParameterType::Array { .. } => {
let ty_name = param.r#type.codegen_type_name(&param.name);
quote! {
crate::request::models::#request_mod_name::#ty_name
}
}
};
let arg_name = format_ident!("{}", param.value.to_snake_case());
@ -462,7 +468,12 @@ impl Path {
crate::models::#ty_name
}
}
ParameterType::Array { .. } => param.r#type.codegen_type_name(&param.name),
ParameterType::Array { .. } => {
let name = param.r#type.codegen_type_name(&param.name);
quote! {
crate::request::models::#request_mod_name::#name
}
}
};
let arg_name = format_ident!("{}", param.value.to_snake_case());

View file

@ -415,7 +415,7 @@ pub(super) mod test {
let forum_scope = ForumScope(&client);
forum_scope
.threads_for_category_ids("2".to_owned(), |b| b)
.threads_for_category_ids([2.into()].into(), |b| b)
.await
.unwrap();
}
@ -640,7 +640,7 @@ pub(super) mod test {
let torn_scope = TornScope(&client);
torn_scope
.items_for_ids("1".to_owned(), |b| b)
.items_for_ids([1.into()].into(), |b| b)
.await
.unwrap();
}