Skip to content
This repository was archived by the owner on May 9, 2025. It is now read-only.

Commit 82410ae

Browse files
authored
[Rust Server] Hyper 0.13 + Async/Await support (OpenAPITools#6244)
* [Rust Server] Hyper 0.13 + Async/Await support Upgrade dependencies to Hyper 0.13 and use async/await. * [Rust Server] Add missing hyper-tls dependency * [Rust Server] Add missing models import * Update samples
1 parent c3ac84c commit 82410ae

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+10649
-10816
lines changed

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

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ client = [
2727
"serde_ignored", "regex", "percent-encoding", "lazy_static",
2828
{{/hasCallbacks}}
2929
{{! Anything added to the list below, should probably be added to the callbacks list below }}
30-
"hyper", "hyper-openssl", "native-tls", "openssl", "url"
30+
"hyper", "hyper-openssl", "hyper-tls", "native-tls", "openssl", "url"
3131
]
3232
server = [
3333
{{#apiUsesMultipart}}
@@ -40,7 +40,7 @@ server = [
4040
"hyper_0_10", "mime_multipart",
4141
{{/apiUsesMultipartRelated}}
4242
{{#hasCallbacks}}
43-
"native-tls", "hyper-openssl", "openssl",
43+
"native-tls", "hyper-openssl", "hyper-tls", "openssl",
4444
{{/hasCallbacks}}
4545
{{! Anything added to the list below, should probably be added to the callbacks list above }}
4646
"serde_ignored", "hyper", "regex", "percent-encoding", "url", "lazy_static"
@@ -49,20 +49,22 @@ conversion = ["frunk", "frunk_derives", "frunk_core", "frunk-enum-core", "frunk-
4949

5050
[target.'cfg(any(target_os = "macos", target_os = "windows", target_os = "ios"))'.dependencies]
5151
native-tls = { version = "0.2", optional = true }
52+
hyper-tls = { version = "0.4", optional = true }
5253

5354
[target.'cfg(not(any(target_os = "macos", target_os = "windows", target_os = "ios")))'.dependencies]
54-
hyper-openssl = { version = "0.7.1", optional = true }
55+
hyper-openssl = { version = "0.8", optional = true }
5556
openssl = {version = "0.10", optional = true }
5657

5758
[dependencies]
5859
# Common
60+
async-trait = "0.1.24"
5961
chrono = { version = "0.4", features = ["serde"] }
60-
futures = "0.1"
61-
swagger = "4.0"
62+
futures = "0.3"
63+
swagger = "5.0.0-alpha-1"
6264
log = "0.4.0"
6365
mime = "0.3"
6466

65-
serde = { version = "1.0", features = ["derive"]}
67+
serde = { version = "1.0", features = ["derive"] }
6668
serde_json = "1.0"
6769

6870
# Crates included if required by the API definition
@@ -78,27 +80,27 @@ mime_0_2 = { package = "mime", version = "0.2.6", optional = true }
7880
multipart = { version = "0.16", default-features = false, optional = true }
7981
{{/apiUsesMultipartFormData}}
8082
{{#apiUsesUuid}}
81-
uuid = {version = "0.7", features = ["serde", "v4"]}
83+
uuid = {version = "0.8", features = ["serde", "v4"]}
8284
{{/apiUsesUuid}}
8385

8486
# Common between server and client features
85-
hyper = {version = "0.12", optional = true}
87+
hyper = {version = "0.13", optional = true}
8688
{{#apiUsesMultipartRelated}}
8789
mime_multipart = {version = "0.5", optional = true}
8890
hyper_0_10 = {package = "hyper", version = "0.10", default-features = false, optional=true}
8991
{{/apiUsesMultipartRelated}}
90-
serde_ignored = {version = "0.0.4", optional = true}
91-
url = {version = "1.5", optional = true}
92+
serde_ignored = {version = "0.1.1", optional = true}
93+
url = {version = "2.1", optional = true}
9294

9395
# Client-specific
9496
{{#usesUrlEncodedForm}}
95-
serde_urlencoded = {version = "0.5.1", optional = true}
97+
serde_urlencoded = {version = "0.6.1", optional = true}
9698
{{/usesUrlEncodedForm}}
9799

98100
# Server, and client callback-specific
99101
lazy_static = { version = "1.4", optional = true }
100-
percent-encoding = {version = "1.0.0", optional = true}
101-
regex = {version = "0.2", optional = true}
102+
percent-encoding = {version = "2.1.0", optional = true}
103+
regex = {version = "1.3", optional = true}
102104

103105
# Conversion
104106
frunk = { version = "0.3.0", optional = true }
@@ -109,15 +111,13 @@ frunk-enum-core = { version = "0.2.0", optional = true }
109111

110112
[dev-dependencies]
111113
clap = "2.25"
112-
error-chain = "0.12"
113-
env_logger = "0.6"
114-
tokio = "0.1.17"
115-
{{^apiUsesUuid}}
116-
uuid = {version = "0.7", features = ["serde", "v4"]}
117-
{{/apiUsesUuid}}
114+
env_logger = "0.7"
115+
tokio = { version = "0.2", features = ["rt-threaded", "macros", "stream"] }
116+
native-tls = "0.2"
117+
tokio-tls = "0.3"
118118

119119
[target.'cfg(not(any(target_os = "macos", target_os = "windows", target_os = "ios")))'.dev-dependencies]
120-
tokio-openssl = "0.3"
120+
tokio-openssl = "0.4"
121121
openssl = "0.10"
122122

123123
[[example]]
Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,23 @@
1-
use futures;
2-
use futures::{Future, Stream, future, stream};
3-
use hyper;
4-
use hyper::client::HttpConnector;
1+
use async_trait::async_trait;
2+
use futures::{Stream, future, future::BoxFuture, stream, future::TryFutureExt, future::FutureExt, stream::StreamExt};
53
use hyper::header::{HeaderName, HeaderValue, CONTENT_TYPE};
6-
use hyper::{Body, Uri, Response};
7-
#[cfg(not(any(target_os = "macos", target_os = "windows", target_os = "ios")))]
8-
use hyper_openssl::HttpsConnector;
9-
use serde_json;
4+
use hyper::{Body, Request, Response, service::Service, Uri};
5+
use percent_encoding::{utf8_percent_encode, AsciiSet};
106
use std::borrow::Cow;
117
use std::convert::TryInto;
12-
use std::io::{Read, Error, ErrorKind};
13-
use std::error;
8+
use std::io::{ErrorKind, Read};
9+
use std::error::Error;
10+
use std::future::Future;
1411
use std::fmt;
1512
use std::path::Path;
16-
use std::sync::Arc;
13+
use std::sync::{Arc, Mutex};
1714
use std::str;
1815
use std::str::FromStr;
1916
use std::string::ToString;
20-
use swagger;
21-
use swagger::{ApiError, Connector, client::Service, XSpanIdString, Has, AuthData};
17+
use std::task::{Context, Poll};
18+
use swagger::{ApiError, AuthData, BodyExt, Connector, Has, XSpanIdString};
2219
use url::form_urlencoded;
23-
use url::percent_encoding::{utf8_percent_encode, PATH_SEGMENT_ENCODE_SET, QUERY_ENCODE_SET};
20+
2421
{{#apiUsesMultipartFormData}}
2522
use mime::Mime;
2623
use std::io::Cursor;
@@ -30,20 +27,18 @@ use multipart::client::lazy::Multipart;
3027
use hyper_0_10::header::{Headers, ContentType};
3128
use mime_multipart::{Node, Part, generate_boundary, write_multipart};
3229
{{/apiUsesMultipartRelated}}
33-
{{#apiUsesUuid}}
34-
use uuid;
35-
{{/apiUsesUuid}}
36-
{{#usesXml}}
37-
use serde_xml_rs;
38-
{{/usesXml}}
3930

4031
use crate::models;
4132
use crate::header;
4233

43-
url::define_encode_set! {
44-
/// This encode set is used for object IDs
45-
///
46-
/// Aside from the special characters defined in the `PATH_SEGMENT_ENCODE_SET`,
47-
/// the vertical bar (|) is encoded.
48-
pub ID_ENCODE_SET = [PATH_SEGMENT_ENCODE_SET] | {'|'}
49-
}
34+
/// https://url.spec.whatwg.org/#fragment-percent-encode-set
35+
#[allow(dead_code)]
36+
const FRAGMENT_ENCODE_SET: &AsciiSet = &percent_encoding::CONTROLS
37+
.add(b' ').add(b'"').add(b'<').add(b'>').add(b'`');
38+
39+
/// This encode set is used for object IDs
40+
///
41+
/// Aside from the special characters defined in the `PATH_SEGMENT_ENCODE_SET`,
42+
/// the vertical bar (|) is encoded.
43+
#[allow(dead_code)]
44+
const ID_ENCODE_SET: &AsciiSet = &FRAGMENT_ENCODE_SET.add(b'|');

0 commit comments

Comments
 (0)