forked from loafle/openapi-generator-original
feat: [rust] Dynamically add uuid crate only if used (#20619)
This commit is contained in:
parent
c2c161eb26
commit
79f70dcc8b
@ -38,11 +38,10 @@ import org.openapitools.codegen.CodegenConfig;
|
|||||||
import org.openapitools.codegen.CodegenConstants;
|
import org.openapitools.codegen.CodegenConstants;
|
||||||
import org.openapitools.codegen.CodegenModel;
|
import org.openapitools.codegen.CodegenModel;
|
||||||
import org.openapitools.codegen.CodegenOperation;
|
import org.openapitools.codegen.CodegenOperation;
|
||||||
import org.openapitools.codegen.CodegenProperty;
|
|
||||||
import org.openapitools.codegen.CodegenParameter;
|
import org.openapitools.codegen.CodegenParameter;
|
||||||
|
import org.openapitools.codegen.CodegenProperty;
|
||||||
import org.openapitools.codegen.CodegenType;
|
import org.openapitools.codegen.CodegenType;
|
||||||
import org.openapitools.codegen.SupportingFile;
|
import org.openapitools.codegen.SupportingFile;
|
||||||
import org.openapitools.codegen.VendorExtension;
|
|
||||||
import org.openapitools.codegen.meta.features.ClientModificationFeature;
|
import org.openapitools.codegen.meta.features.ClientModificationFeature;
|
||||||
import org.openapitools.codegen.meta.features.DocumentationFeature;
|
import org.openapitools.codegen.meta.features.DocumentationFeature;
|
||||||
import org.openapitools.codegen.meta.features.GlobalFeature;
|
import org.openapitools.codegen.meta.features.GlobalFeature;
|
||||||
@ -109,6 +108,10 @@ public class RustClientCodegen extends AbstractRustCodegen implements CodegenCon
|
|||||||
protected String modelDocPath = "docs/";
|
protected String modelDocPath = "docs/";
|
||||||
protected String apiFolder = "src/apis";
|
protected String apiFolder = "src/apis";
|
||||||
protected String modelFolder = "src/models";
|
protected String modelFolder = "src/models";
|
||||||
|
// The API has at least one UUID type.
|
||||||
|
// If the API does not contain any UUIDs we do not need depend on the `uuid` crate
|
||||||
|
private boolean hasUUIDs = false;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CodegenType getTag() {
|
public CodegenType getTag() {
|
||||||
@ -253,6 +256,7 @@ public class RustClientCodegen extends AbstractRustCodegen implements CodegenCon
|
|||||||
supportedLibraries.put(REQWEST_LIBRARY, "HTTP client: Reqwest.");
|
supportedLibraries.put(REQWEST_LIBRARY, "HTTP client: Reqwest.");
|
||||||
supportedLibraries.put(REQWEST_TRAIT_LIBRARY, "HTTP client: Reqwest (trait based).");
|
supportedLibraries.put(REQWEST_TRAIT_LIBRARY, "HTTP client: Reqwest (trait based).");
|
||||||
|
|
||||||
|
|
||||||
CliOption libraryOption = new CliOption(CodegenConstants.LIBRARY, "library template (sub-template) to use.");
|
CliOption libraryOption = new CliOption(CodegenConstants.LIBRARY, "library template (sub-template) to use.");
|
||||||
libraryOption.setEnum(supportedLibraries);
|
libraryOption.setEnum(supportedLibraries);
|
||||||
// set reqwest as the default
|
// set reqwest as the default
|
||||||
@ -642,6 +646,13 @@ public class RustClientCodegen extends AbstractRustCodegen implements CodegenCon
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (var param : operation.allParams) {
|
||||||
|
if (!hasUUIDs && param.isUuid) {
|
||||||
|
hasUUIDs = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// http method verb conversion, depending on client library (e.g. Hyper: PUT => Put, Reqwest: PUT => put)
|
// http method verb conversion, depending on client library (e.g. Hyper: PUT => Put, Reqwest: PUT => put)
|
||||||
if (HYPER_LIBRARY.equals(getLibrary())) {
|
if (HYPER_LIBRARY.equals(getLibrary())) {
|
||||||
operation.httpMethod = StringUtils.camelize(operation.httpMethod.toLowerCase(Locale.ROOT));
|
operation.httpMethod = StringUtils.camelize(operation.httpMethod.toLowerCase(Locale.ROOT));
|
||||||
@ -705,9 +716,43 @@ public class RustClientCodegen extends AbstractRustCodegen implements CodegenCon
|
|||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!hasUUIDs) {
|
||||||
|
for (var map : allModels) {
|
||||||
|
CodegenModel m = map.getModel();
|
||||||
|
if (m.getIsUuid() || hasUuidInProperties(m.vars)) {
|
||||||
|
hasUUIDs = true;
|
||||||
|
LOGGER.debug("found UUID in model: " + m.name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.additionalProperties.put("hasUUIDs", hasUUIDs);
|
||||||
return objs;
|
return objs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recursively searches for a model's properties for a UUID type field.
|
||||||
|
*/
|
||||||
|
private boolean hasUuidInProperties(List<CodegenProperty> properties) {
|
||||||
|
for (CodegenProperty property : properties) {
|
||||||
|
if (property.isUuid) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// Check nested properties
|
||||||
|
if (property.items != null && hasUuidInProperties(Collections.singletonList(property.items))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (property.additionalProperties != null && hasUuidInProperties(Collections.singletonList(property.additionalProperties))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (property.vars != null && hasUuidInProperties(property.vars)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toDefaultValue(Schema p) {
|
public String toDefaultValue(Schema p) {
|
||||||
if (p.getDefault() != null) {
|
if (p.getDefault() != null) {
|
||||||
|
@ -39,7 +39,9 @@ serde_with = { version = "^3.8", default-features = false, features = ["base64",
|
|||||||
serde_json = "^1.0"
|
serde_json = "^1.0"
|
||||||
serde_repr = "^0.1"
|
serde_repr = "^0.1"
|
||||||
url = "^2.5"
|
url = "^2.5"
|
||||||
|
{{#hasUUIDs}}
|
||||||
uuid = { version = "^1.8", features = ["serde", "v4"] }
|
uuid = { version = "^1.8", features = ["serde", "v4"] }
|
||||||
|
{{/hasUUIDs}}
|
||||||
{{#hyper}}
|
{{#hyper}}
|
||||||
{{#hyper0x}}
|
{{#hyper0x}}
|
||||||
hyper = { version = "~0.14", features = ["full"] }
|
hyper = { version = "~0.14", features = ["full"] }
|
||||||
|
@ -12,7 +12,6 @@ serde = { version = "^1.0", features = ["derive"] }
|
|||||||
serde_json = "^1.0"
|
serde_json = "^1.0"
|
||||||
serde_repr = "^0.1"
|
serde_repr = "^0.1"
|
||||||
url = "^2.5"
|
url = "^2.5"
|
||||||
uuid = { version = "^1.8", features = ["serde", "v4"] }
|
|
||||||
hyper = { version = "^1.3.1", features = ["full"] }
|
hyper = { version = "^1.3.1", features = ["full"] }
|
||||||
hyper-util = { version = "0.1.5", features = ["client", "client-legacy", "http1", "http2"] }
|
hyper-util = { version = "0.1.5", features = ["client", "client-legacy", "http1", "http2"] }
|
||||||
http-body-util = { version = "0.1.2" }
|
http-body-util = { version = "0.1.2" }
|
||||||
|
@ -12,7 +12,6 @@ serde = { version = "^1.0", features = ["derive"] }
|
|||||||
serde_json = "^1.0"
|
serde_json = "^1.0"
|
||||||
serde_repr = "^0.1"
|
serde_repr = "^0.1"
|
||||||
url = "^2.5"
|
url = "^2.5"
|
||||||
uuid = { version = "^1.8", features = ["serde", "v4"] }
|
|
||||||
hyper = { version = "^1.3.1", features = ["full"] }
|
hyper = { version = "^1.3.1", features = ["full"] }
|
||||||
hyper-util = { version = "0.1.5", features = ["client", "client-legacy", "http1", "http2"] }
|
hyper-util = { version = "0.1.5", features = ["client", "client-legacy", "http1", "http2"] }
|
||||||
http-body-util = { version = "0.1.2" }
|
http-body-util = { version = "0.1.2" }
|
||||||
|
@ -12,7 +12,6 @@ serde = { version = "^1.0", features = ["derive"] }
|
|||||||
serde_json = "^1.0"
|
serde_json = "^1.0"
|
||||||
serde_repr = "^0.1"
|
serde_repr = "^0.1"
|
||||||
url = "^2.5"
|
url = "^2.5"
|
||||||
uuid = { version = "^1.8", features = ["serde", "v4"] }
|
|
||||||
hyper = { version = "^1.3.1", features = ["full"] }
|
hyper = { version = "^1.3.1", features = ["full"] }
|
||||||
hyper-util = { version = "0.1.5", features = ["client", "client-legacy", "http1", "http2"] }
|
hyper-util = { version = "0.1.5", features = ["client", "client-legacy", "http1", "http2"] }
|
||||||
http-body-util = { version = "0.1.2" }
|
http-body-util = { version = "0.1.2" }
|
||||||
|
@ -12,7 +12,6 @@ serde = { version = "^1.0", features = ["derive"] }
|
|||||||
serde_json = "^1.0"
|
serde_json = "^1.0"
|
||||||
serde_repr = "^0.1"
|
serde_repr = "^0.1"
|
||||||
url = "^2.5"
|
url = "^2.5"
|
||||||
uuid = { version = "^1.8", features = ["serde", "v4"] }
|
|
||||||
hyper = { version = "^1.3.1", features = ["full"] }
|
hyper = { version = "^1.3.1", features = ["full"] }
|
||||||
hyper-util = { version = "0.1.5", features = ["client", "client-legacy", "http1", "http2"] }
|
hyper-util = { version = "0.1.5", features = ["client", "client-legacy", "http1", "http2"] }
|
||||||
http-body-util = { version = "0.1.2" }
|
http-body-util = { version = "0.1.2" }
|
||||||
|
@ -11,7 +11,6 @@ serde = { version = "^1.0", features = ["derive"] }
|
|||||||
serde_json = "^1.0"
|
serde_json = "^1.0"
|
||||||
serde_repr = "^0.1"
|
serde_repr = "^0.1"
|
||||||
url = "^2.5"
|
url = "^2.5"
|
||||||
uuid = { version = "^1.8", features = ["serde", "v4"] }
|
|
||||||
hyper = { version = "^1.3.1", features = ["full"] }
|
hyper = { version = "^1.3.1", features = ["full"] }
|
||||||
hyper-util = { version = "0.1.5", features = ["client", "client-legacy", "http1", "http2"] }
|
hyper-util = { version = "0.1.5", features = ["client", "client-legacy", "http1", "http2"] }
|
||||||
http-body-util = { version = "0.1.2" }
|
http-body-util = { version = "0.1.2" }
|
||||||
|
@ -12,7 +12,6 @@ serde = { version = "^1.0", features = ["derive"] }
|
|||||||
serde_json = "^1.0"
|
serde_json = "^1.0"
|
||||||
serde_repr = "^0.1"
|
serde_repr = "^0.1"
|
||||||
url = "^2.5"
|
url = "^2.5"
|
||||||
uuid = { version = "^1.8", features = ["serde", "v4"] }
|
|
||||||
hyper = { version = "^1.3.1", features = ["full"] }
|
hyper = { version = "^1.3.1", features = ["full"] }
|
||||||
hyper-util = { version = "0.1.5", features = ["client", "client-legacy", "http1", "http2"] }
|
hyper-util = { version = "0.1.5", features = ["client", "client-legacy", "http1", "http2"] }
|
||||||
http-body-util = { version = "0.1.2" }
|
http-body-util = { version = "0.1.2" }
|
||||||
|
@ -12,5 +12,4 @@ serde = { version = "^1.0", features = ["derive"] }
|
|||||||
serde_json = "^1.0"
|
serde_json = "^1.0"
|
||||||
serde_repr = "^0.1"
|
serde_repr = "^0.1"
|
||||||
url = "^2.5"
|
url = "^2.5"
|
||||||
uuid = { version = "^1.8", features = ["serde", "v4"] }
|
|
||||||
reqwest = { version = "^0.12", features = ["json", "blocking", "multipart"] }
|
reqwest = { version = "^0.12", features = ["json", "blocking", "multipart"] }
|
||||||
|
@ -12,5 +12,4 @@ serde = { version = "^1.0", features = ["derive"] }
|
|||||||
serde_json = "^1.0"
|
serde_json = "^1.0"
|
||||||
serde_repr = "^0.1"
|
serde_repr = "^0.1"
|
||||||
url = "^2.5"
|
url = "^2.5"
|
||||||
uuid = { version = "^1.8", features = ["serde", "v4"] }
|
|
||||||
reqwest = { version = "^0.12", features = ["json", "multipart"] }
|
reqwest = { version = "^0.12", features = ["json", "multipart"] }
|
||||||
|
@ -12,5 +12,4 @@ serde = { version = "^1.0", features = ["derive"] }
|
|||||||
serde_json = "^1.0"
|
serde_json = "^1.0"
|
||||||
serde_repr = "^0.1"
|
serde_repr = "^0.1"
|
||||||
url = "^2.5"
|
url = "^2.5"
|
||||||
uuid = { version = "^1.8", features = ["serde", "v4"] }
|
|
||||||
reqwest = { version = "^0.12", features = ["json", "blocking", "multipart"] }
|
reqwest = { version = "^0.12", features = ["json", "blocking", "multipart"] }
|
||||||
|
@ -12,5 +12,4 @@ serde = { version = "^1.0", features = ["derive"] }
|
|||||||
serde_json = "^1.0"
|
serde_json = "^1.0"
|
||||||
serde_repr = "^0.1"
|
serde_repr = "^0.1"
|
||||||
url = "^2.5"
|
url = "^2.5"
|
||||||
uuid = { version = "^1.8", features = ["serde", "v4"] }
|
|
||||||
reqwest = { version = "^0.12", features = ["json", "blocking", "multipart"] }
|
reqwest = { version = "^0.12", features = ["json", "blocking", "multipart"] }
|
||||||
|
@ -12,5 +12,4 @@ serde = { version = "^1.0", features = ["derive"] }
|
|||||||
serde_json = "^1.0"
|
serde_json = "^1.0"
|
||||||
serde_repr = "^0.1"
|
serde_repr = "^0.1"
|
||||||
url = "^2.5"
|
url = "^2.5"
|
||||||
uuid = { version = "^1.8", features = ["serde", "v4"] }
|
|
||||||
reqwest = { version = "^0.12", features = ["json", "blocking", "multipart"] }
|
reqwest = { version = "^0.12", features = ["json", "blocking", "multipart"] }
|
||||||
|
@ -11,5 +11,4 @@ serde = { version = "^1.0", features = ["derive"] }
|
|||||||
serde_json = "^1.0"
|
serde_json = "^1.0"
|
||||||
serde_repr = "^0.1"
|
serde_repr = "^0.1"
|
||||||
url = "^2.5"
|
url = "^2.5"
|
||||||
uuid = { version = "^1.8", features = ["serde", "v4"] }
|
|
||||||
reqwest = { version = "^0.12", features = ["json", "blocking", "multipart"] }
|
reqwest = { version = "^0.12", features = ["json", "blocking", "multipart"] }
|
||||||
|
@ -12,5 +12,4 @@ serde = { version = "^1.0", features = ["derive"] }
|
|||||||
serde_json = "^1.0"
|
serde_json = "^1.0"
|
||||||
serde_repr = "^0.1"
|
serde_repr = "^0.1"
|
||||||
url = "^2.5"
|
url = "^2.5"
|
||||||
uuid = { version = "^1.8", features = ["serde", "v4"] }
|
|
||||||
reqwest = { version = "^0.12", features = ["json", "blocking", "multipart"] }
|
reqwest = { version = "^0.12", features = ["json", "blocking", "multipart"] }
|
||||||
|
@ -11,5 +11,4 @@ serde = { version = "^1.0", features = ["derive"] }
|
|||||||
serde_json = "^1.0"
|
serde_json = "^1.0"
|
||||||
serde_repr = "^0.1"
|
serde_repr = "^0.1"
|
||||||
url = "^2.5"
|
url = "^2.5"
|
||||||
uuid = { version = "^1.8", features = ["serde", "v4"] }
|
|
||||||
reqwest = { version = "^0.12", features = ["json", "blocking", "multipart"] }
|
reqwest = { version = "^0.12", features = ["json", "blocking", "multipart"] }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user