Skip to content

Commit 564e53e

Browse files
TroyKomodoranger-ross
authored andcommitted
feat: add support for single argument and bon builder
Adds support for single argument and bon building for the new reqwest-trait generator
1 parent 5a1fa1f commit 564e53e

File tree

3 files changed

+55
-26
lines changed

3 files changed

+55
-26
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustClientCodegen.java

+3
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ public class RustClientCodegen extends AbstractRustCodegen implements CodegenCon
9696
public static final String AVOID_BOXED_MODELS = "avoidBoxedModels";
9797
public static final String TOP_LEVEL_API_CLIENT = "topLevelApiClient";
9898
public static final String MOCKALL = "mockall";
99+
public static final String BON_BUILDER = "useBonBuilder";
99100

100101
@Setter protected String packageName = "openapi";
101102
@Setter protected String packageVersion = "1.0.0";
@@ -239,6 +240,8 @@ public RustClientCodegen() {
239240
.defaultValue(Boolean.FALSE.toString()));
240241
cliOptions.add(new CliOption(TOP_LEVEL_API_CLIENT, "Creates a top level `Api` trait and `ApiClient` struct that contain all Apis. This option is for 'reqwest-trait' library only", SchemaTypeUtil.BOOLEAN_TYPE)
241242
.defaultValue(Boolean.FALSE.toString()));
243+
cliOptions.add(new CliOption(BON_BUILDER, "Use the bon crate for building parameter types. This option is for the 'reqwest-trait' library only", SchemaTypeUtil.BOOLEAN_TYPE)
244+
.defaultValue(Boolean.FALSE.toString()));
242245

243246
supportedLibraries.put(HYPER_LIBRARY, "HTTP client: Hyper (v1.x).");
244247
supportedLibraries.put(HYPER0X_LIBRARY, "HTTP client: Hyper (v0.x).");

modules/openapi-generator/src/main/resources/rust/Cargo.mustache

+8-3
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,14 @@ google-cloud-token = "^0.1"
9191
{{#mockall}}
9292
mockall = { version = "^0.13", optional = true}
9393
{{/mockall}}
94-
{{/reqwestTrait}}
95-
94+
{{#useBonBuilder}}
95+
bon = { version = "2.3", optional = true }
96+
{{/useBonBuilder}}
9697
[features]
9798
{{#mockall}}
9899
mockall = ["dep:mockall"]
99-
{{/mockall}}
100+
{{/mockall}}
101+
{{#useBonBuilder}}
102+
bon = ["dep:bon"]
103+
{{/useBonBuilder}}
104+
{{/reqwestTrait}}

modules/openapi-generator/src/main/resources/rust/reqwest-trait/api.mustache

+44-23
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,12 @@ use super::{Error, configuration};
1818
pub trait {{{classname}}}: Send + Sync {
1919
{{#operations}}
2020
{{#operation}}
21+
{{#vendorExtensions.x-group-parameters}}
22+
async fn {{{operationId}}}(&self, {{#allParams}}{{#-first}} params: {{{operationIdCamelCase}}}Params {{/-first}}{{/allParams}}) -> Result<{{#supportMultipleResponses}}ResponseContent<{{{operationIdCamelCase}}}Success>{{/supportMultipleResponses}}{{^supportMultipleResponses}}{{^returnType}}(){{/returnType}}{{{returnType}}}{{/supportMultipleResponses}}, Error<{{{operationIdCamelCase}}}Error>>;
23+
{{/vendorExtensions.x-group-parameters}}
24+
{{^vendorExtensions.x-group-parameters}}
2125
async fn {{{operationId}}}<{{#allParams}}'{{{paramName}}}{{^-last}}, {{/-last}}{{/allParams}}>(&self, {{#allParams}}{{{paramName}}}: {{^required}}Option<{{/required}}{{#required}}{{#isNullable}}Option<{{/isNullable}}{{/required}}{{#isString}}{{#isArray}}Vec<{{/isArray}}{{^isUuid}}&'{{{paramName}}} str{{/isUuid}}{{#isArray}}>{{/isArray}}{{/isString}}{{#isUuid}}{{#isArray}}Vec<{{/isArray}}&str{{#isArray}}>{{/isArray}}{{/isUuid}}{{^isString}}{{^isUuid}}{{^isPrimitiveType}}{{^isContainer}}models::{{/isContainer}}{{/isPrimitiveType}}{{{dataType}}}{{/isUuid}}{{/isString}}{{^required}}>{{/required}}{{#required}}{{#isNullable}}>{{/isNullable}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) -> Result<{{#supportMultipleResponses}}ResponseContent<{{{operationIdCamelCase}}}Success>{{/supportMultipleResponses}}{{^supportMultipleResponses}}{{^returnType}}(){{/returnType}}{{{returnType}}}{{/supportMultipleResponses}}, Error<{{{operationIdCamelCase}}}Error>>;
26+
{{/vendorExtensions.x-group-parameters}}
2227
{{/operation}}
2328
{{/operations}}
2429
}
@@ -33,6 +38,32 @@ impl {{classname}}Client {
3338
}
3439
}
3540

41+
42+
{{#operations}}
43+
{{#operation}}
44+
{{#vendorExtensions.x-group-parameters}}
45+
{{#allParams}}
46+
{{#-first}}
47+
/// struct for passing parameters to the method [`{{operationId}}`]
48+
#[derive(Clone, Debug)]
49+
{{#useBonBuilder}}
50+
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
51+
{{/useBonBuilder}}
52+
pub struct {{{operationIdCamelCase}}}Params {
53+
{{/-first}}
54+
{{#description}}
55+
/// {{{.}}}
56+
{{/description}}
57+
pub {{{paramName}}}: {{^required}}Option<{{/required}}{{#required}}{{#isNullable}}Option<{{/isNullable}}{{/required}}{{^isUuid}}{{#isString}}{{#isArray}}Vec<{{/isArray}}String{{#isArray}}>{{/isArray}}{{/isString}}{{/isUuid}}{{#isUuid}}{{#isArray}}Vec<{{/isArray}}String{{#isArray}}>{{/isArray}}{{/isUuid}}{{^isString}}{{^isUuid}}{{^isPrimitiveType}}{{^isContainer}}models::{{/isContainer}}{{/isPrimitiveType}}{{{dataType}}}{{/isUuid}}{{/isString}}{{^required}}>{{/required}}{{#required}}{{#isNullable}}>{{/isNullable}}{{/required}}{{^-last}},{{/-last}}
58+
{{#-last}}
59+
}
60+
61+
{{/-last}}
62+
{{/allParams}}
63+
{{/vendorExtensions.x-group-parameters}}
64+
{{/operation}}
65+
{{/operations}}
66+
3667
#[async_trait]
3768
impl {{classname}} for {{classname}}Client {
3869
{{#operations}}
@@ -43,7 +74,20 @@ impl {{classname}} for {{classname}}Client {
4374
{{#notes}}
4475
/// {{{.}}}
4576
{{/notes}}
77+
{{#vendorExtensions.x-group-parameters}}
78+
async fn {{{operationId}}}(&self, {{#allParams}}{{#-first}} params: {{{operationIdCamelCase}}}Params {{/-first}}{{/allParams}}) -> Result<{{#supportMultipleResponses}}ResponseContent<{{{operationIdCamelCase}}}Success>{{/supportMultipleResponses}}{{^supportMultipleResponses}}{{^returnType}}(){{/returnType}}{{{returnType}}}{{/supportMultipleResponses}}, Error<{{{operationIdCamelCase}}}Error>> {
79+
{{#allParams}}{{#-first}}
80+
let {{{operationIdCamelCase}}}Params {
81+
{{#allParams}}
82+
{{{paramName}}},
83+
{{/allParams}}
84+
} = params;
85+
{{/-first}}{{/allParams}}
86+
87+
{{/vendorExtensions.x-group-parameters}}
88+
{{^vendorExtensions.x-group-parameters}}
4689
async fn {{{operationId}}}<{{#allParams}}'{{{paramName}}}{{^-last}}, {{/-last}}{{/allParams}}>(&self, {{#allParams}}{{{paramName}}}: {{^required}}Option<{{/required}}{{#required}}{{#isNullable}}Option<{{/isNullable}}{{/required}}{{#isString}}{{#isArray}}Vec<{{/isArray}}{{^isUuid}}&'{{{paramName}}} str{{/isUuid}}{{#isArray}}>{{/isArray}}{{/isString}}{{#isUuid}}{{#isArray}}Vec<{{/isArray}}&str{{#isArray}}>{{/isArray}}{{/isUuid}}{{^isString}}{{^isUuid}}{{^isPrimitiveType}}{{^isContainer}}models::{{/isContainer}}{{/isPrimitiveType}}{{{dataType}}}{{/isUuid}}{{/isString}}{{^required}}>{{/required}}{{#required}}{{#isNullable}}>{{/isNullable}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) -> Result<{{#supportMultipleResponses}}ResponseContent<{{{operationIdCamelCase}}}Success>{{/supportMultipleResponses}}{{^supportMultipleResponses}}{{^returnType}}(){{/returnType}}{{{returnType}}}{{/supportMultipleResponses}}, Error<{{{operationIdCamelCase}}}Error>> {
90+
{{/vendorExtensions.x-group-parameters}}
4791
let local_var_configuration = &self.configuration;
4892

4993
let local_var_client = &local_var_configuration.client;
@@ -313,29 +357,6 @@ impl {{classname}} for {{classname}}Client {
313357
{{/operations}}
314358
}
315359

316-
317-
{{#operations}}
318-
{{#operation}}
319-
{{#vendorExtensions.x-group-parameters}}
320-
{{#allParams}}
321-
{{#-first}}
322-
/// struct for passing parameters to the method [`{{operationId}}`]
323-
#[derive(Clone, Debug)]
324-
pub struct {{{operationIdCamelCase}}}Params {
325-
{{/-first}}
326-
{{#description}}
327-
/// {{{.}}}
328-
{{/description}}
329-
pub {{{paramName}}}: {{^required}}Option<{{/required}}{{#required}}{{#isNullable}}Option<{{/isNullable}}{{/required}}{{^isUuid}}{{#isString}}{{#isArray}}Vec<{{/isArray}}String{{#isArray}}>{{/isArray}}{{/isString}}{{/isUuid}}{{#isUuid}}{{#isArray}}Vec<{{/isArray}}String{{#isArray}}>{{/isArray}}{{/isUuid}}{{^isString}}{{^isUuid}}{{^isPrimitiveType}}{{^isContainer}}models::{{/isContainer}}{{/isPrimitiveType}}{{{dataType}}}{{/isUuid}}{{/isString}}{{^required}}>{{/required}}{{#required}}{{#isNullable}}>{{/isNullable}}{{/required}}{{^-last}},{{/-last}}
330-
{{#-last}}
331-
}
332-
333-
{{/-last}}
334-
{{/allParams}}
335-
{{/vendorExtensions.x-group-parameters}}
336-
{{/operation}}
337-
{{/operations}}
338-
339360
{{#supportMultipleResponses}}
340361
{{#operations}}
341362
{{#operation}}

0 commit comments

Comments
 (0)