Skip to content

Commit 18d969e

Browse files
LukeMathWalkerjjantjdisanti
authored
Upgrade to Rust 1.62.0 (#1825)
* Run clippy --fix for Rust 1.62.0 and format the resulting code * Run clippy --fix on all targets * Run clippy --fix with all features enabled * Avoid extra allocation * Use more idiomatic assert * Ignore noisy lint * Update pyo3 and pyo3-asyncio to 0.17.0 * Implement Eq on aws-smithy-checksums::Error * Implement Eq on Protocol * Replace conditionals with range-containment * Implement Eq on types in aws-smithy-types * Implement Eq on types in aws-smithy-http-server-python * Implement Eq on types in aws-smithy-eventstream * Implement Eq on types in aws-smithy-xml * Implement Eq on aws-sigv4 * Update CI to use Rust 1.62.0 * Add Eq for generated types that implement PartialEq * Allow clippy::needless_return in generated code * Remove unnecessary reborrow in http_serde * Remove unnecessary borrow in operation_deser * Add CHANGELOG entries * Revert "Add Eq for generated types that implement PartialEq" This reverts commit 5169bd9. * Update pyo3 and pyo3-asyncio in generated code for python server * Allow clippy::derive_partial_eq_without_eq on structs and builders * Run clippy on tools * Fix accidental move in generated code * Revert "Allow clippy::derive_partial_eq_without_eq on structs and builders" This reverts commit 068c63c. * Fix another accidental move in generated code * Undo unwanted change to model * Re-add reborrow in HttpBindingGenerator * Fix clippy::format-push-string in changelogger * Fix more uses of str.push_str(&format!(...)) * Remove unnecessary parenthesis * Run ktlint * Update aws/rust-runtime/aws-http/src/content_encoding.rs Co-authored-by: John DiSanti <[email protected]> * Update aws/rust-runtime/aws-http/src/content_encoding.rs Co-authored-by: John DiSanti <[email protected]> * Ignore doctest for non-exported macro Rust 1.62 introduced a breaking change where doctests for non-exported macros are now run by default. These don't compile because the macro can't be imported in it. See rust-lang/rust#97030 for more info. * Run cargo fmt * Use $crate instead of crate in macro * Revert "Implement Eq on types in aws-smithy-types" This reverts commit c45a6b5. * Revert "Implement Eq on types in aws-smithy-eventstream" This reverts commit 78f4b07. * Revert "Implement Eq on types in aws-smithy-xml" This reverts commit 590f01a. * Revert "Implement Eq on aws-sigv4" This reverts commit d78bb62. * Revert "Implement Eq on types in aws-smithy-http-server-python" This reverts commit f2cd901. * Revert "Implement Eq on aws-smithy-checksums::Error" This reverts commit 5da1704. Co-authored-by: Julian Antonielli <[email protected]> Co-authored-by: John DiSanti <[email protected]>
1 parent c7ddb16 commit 18d969e

File tree

49 files changed

+122
-98
lines changed

Some content is hidden

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

49 files changed

+122
-98
lines changed

.github/workflows/ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ on:
99
workflow_call:
1010

1111
env:
12-
rust_version: 1.61.0
12+
rust_version: 1.62.0
1313
rust_toolchain_components: clippy,rustfmt
1414

1515
jobs:

.github/workflows/pull-request-bot.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ concurrency:
2828

2929
env:
3030
java_version: 11
31-
rust_version: 1.61.0
31+
rust_version: 1.62.0
3232
rust_toolchain_components: clippy,rustfmt
3333
apt_dependencies: libssl-dev gnuplot jq
3434

.github/workflows/release.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ concurrency:
1010
cancel-in-progress: true
1111

1212
env:
13-
rust_version: 1.61.0
13+
rust_version: 1.62.0
1414

1515
name: Release smithy-rs
1616
run-name: ${{ github.workflow }} - ${{ inputs.dry_run && 'Dry run' || 'Production run' }}

CHANGELOG.next.toml

+19
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,25 @@
1111
# meta = { "breaking" = false, "tada" = false, "bug" = false, "target" = "client | server | all"}
1212
# author = "rcoh"
1313

14+
15+
[[smithy-rs]]
16+
message = "Bump MSRV to be 1.62.0."
17+
references = ["smithy-rs#1825"]
18+
meta = { "breaking" = true, "tada" = false, "bug" = false, "target" = "all" }
19+
author = "LukeMathWalker"
20+
21+
[[smithy-rs]]
22+
message = "Bump pyo3 and pyo3-asyncio from 0.16.x to 0.17.0 for aws-smithy-http-server-python."
23+
references = ["smithy-rs#1825"]
24+
meta = { "breaking" = true, "tada" = false, "bug" = false, "target" = "server" }
25+
author = "LukeMathWalker"
26+
27+
[[aws-sdk-rust]]
28+
message = "Bump MSRV to be 1.62.0."
29+
references = ["smithy-rs#1825"]
30+
meta = { "breaking" = true, "tada" = false, "bug" = false }
31+
author = "LukeMathWalker"
32+
1433
[[smithy-rs]]
1534
message = """
1635
Replace all usages of `AtomicU64` with `AtomicUsize` to support 32bit targets.

aws/rust-runtime/aws-endpoint/src/lib.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -283,8 +283,7 @@ mod test {
283283
props.insert(region.clone());
284284
props.insert(SigningService::from_static("qldb"));
285285
props.insert(
286-
EndpointShim::from_arc(provider)
287-
.resolve_endpoint(&Params::new(Some(region.clone()))),
286+
EndpointShim::from_arc(provider).resolve_endpoint(&Params::new(Some(region))),
288287
);
289288
};
290289
let req = AwsEndpointStage.apply(req).expect("should succeed");
@@ -314,8 +313,7 @@ mod test {
314313
props.insert(region.clone());
315314
props.insert(SigningService::from_static("qldb"));
316315
props.insert(
317-
EndpointShim::from_arc(provider)
318-
.resolve_endpoint(&Params::new(Some(region.clone()))),
316+
EndpointShim::from_arc(provider).resolve_endpoint(&Params::new(Some(region))),
319317
);
320318
};
321319
let req = AwsEndpointStage.apply(req).expect("should succeed");

aws/rust-runtime/aws-http/src/content_encoding.rs

+9-3
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ mod tests {
376376

377377
impl SputteringBody {
378378
fn len(&self) -> usize {
379-
self.parts.iter().flat_map(|b| b).map(|b| b.len()).sum()
379+
self.parts.iter().flatten().map(|b| b.len()).sum()
380380
}
381381
}
382382

@@ -462,7 +462,10 @@ mod tests {
462462
};
463463

464464
let timeout_duration = Duration::from_secs(3);
465-
if let Err(_) = tokio::time::timeout(timeout_duration, test_fut).await {
465+
if tokio::time::timeout(timeout_duration, test_fut)
466+
.await
467+
.is_err()
468+
{
466469
panic!("test_aws_chunked_encoding timed out after {timeout_duration:?}");
467470
}
468471
}
@@ -513,7 +516,10 @@ mod tests {
513516
};
514517

515518
let timeout_duration = Duration::from_secs(3);
516-
if let Err(_) = tokio::time::timeout(timeout_duration, test_fut).await {
519+
if tokio::time::timeout(timeout_duration, test_fut)
520+
.await
521+
.is_err()
522+
{
517523
panic!(
518524
"test_aws_chunked_encoding_sputtering_body timed out after {timeout_duration:?}"
519525
);

aws/rust-runtime/aws-http/src/recursion_detection.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ mod test {
160160
)
161161
}
162162
assert_ok(validate_headers(
163-
&augmented_req.http().headers(),
163+
augmented_req.http().headers(),
164164
test_case.request_headers_after(),
165165
))
166166
}

aws/rust-runtime/aws-http/src/retry.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ mod test {
143143
) -> Result<SdkSuccess<()>, SdkError<E>> {
144144
Err(SdkError::ServiceError {
145145
err,
146-
raw: operation::Response::new(raw.map(|b| SdkBody::from(b))),
146+
raw: operation::Response::new(raw.map(SdkBody::from)),
147147
})
148148
}
149149

@@ -265,9 +265,7 @@ mod test {
265265
policy.classify_retry(
266266
Result::<SdkSuccess<()>, SdkError<UnmodeledError>>::Err(SdkError::ResponseError {
267267
err: Box::new(UnmodeledError),
268-
raw: operation::Response::new(
269-
http::Response::new("OK").map(|b| SdkBody::from(b))
270-
),
268+
raw: operation::Response::new(http::Response::new("OK").map(SdkBody::from)),
271269
})
272270
.as_ref()
273271
),

aws/rust-runtime/aws-inlineable/src/http_body_checksum.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ mod tests {
265265
for i in 0..10000 {
266266
let line = format!("This is a large file created for testing purposes {}", i);
267267
file.as_file_mut().write(line.as_bytes()).unwrap();
268-
crc32c_checksum.update(&line.as_bytes());
268+
crc32c_checksum.update(line.as_bytes());
269269
}
270270

271271
let body = ByteStream::read_from()

aws/rust-runtime/aws-inlineable/tests/middleware_e2e_test.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ fn test_operation() -> Operation<TestOperationParser, AwsResponseRetryClassifier
8282
.body(SdkBody::from("request body"))
8383
.unwrap(),
8484
)
85-
.augment(|req, mut conf| {
85+
.augment(|req, conf| {
8686
conf.insert(
8787
EndpointShim::from_resolver(aws_endpoint::partition::endpoint::Metadata {
8888
uri_template: "test-service.{region}.amazonaws.com",
@@ -93,7 +93,7 @@ fn test_operation() -> Operation<TestOperationParser, AwsResponseRetryClassifier
9393
.resolve_endpoint(&Params::new(Some(Region::new("test-region")))),
9494
);
9595
aws_http::auth::set_provider(
96-
&mut conf,
96+
conf,
9797
SharedCredentialsProvider::new(Credentials::new(
9898
"access_key",
9999
"secret_key",

aws/rust-runtime/aws-sigv4/src/event_stream.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ mod tests {
159159
security_token: None,
160160
region: "us-east-1",
161161
service_name: "testservice",
162-
time: (UNIX_EPOCH + Duration::new(123_456_789_u64, 1234u32)).into(),
162+
time: (UNIX_EPOCH + Duration::new(123_456_789_u64, 1234u32)),
163163
settings: (),
164164
};
165165

@@ -197,7 +197,7 @@ mod tests {
197197
security_token: None,
198198
region: "us-east-1",
199199
service_name: "testservice",
200-
time: (UNIX_EPOCH + Duration::new(123_456_789_u64, 1234u32)).into(),
200+
time: (UNIX_EPOCH + Duration::new(123_456_789_u64, 1234u32)),
201201
settings: (),
202202
};
203203

aws/rust-runtime/aws-sigv4/src/http_request/canonical_request.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -597,7 +597,7 @@ mod tests {
597597
region: "us-east-1",
598598
service: "iam",
599599
};
600-
assert_eq!(format!("{}\n", scope.to_string()), expected);
600+
assert_eq!(format!("{}\n", scope), expected);
601601
}
602602

603603
#[test]

aws/rust-runtime/aws-types/src/build_metadata.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ pub enum OsFamily {
4141
/// is set to a specific value. This macro simplifies checking the current OS family.
4242
///
4343
/// Usage:
44-
/// ```rust
44+
/// ```ignore
4545
/// let os = get_os_family!(target_os: ("linux", OsFamily::Windows), ("android", OsFamily::Android));
4646
/// ```
4747
macro_rules! get_os_family {

codegen-client/src/main/kotlin/software/amazon/smithy/rust/codegen/client/smithy/customizations/AllowLintsGenerator.kt

+3
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ val AllowedClippyLints = listOf(
3939

4040
// Some models have shapes that generate complex Rust types (e.g. nested collection and map shapes).
4141
"type_complexity",
42+
43+
// Determining if the expression is the last one (to remove return) can make codegen harder in some cases.
44+
"needless_return",
4245
)
4346

4447
val AllowedRustdocLints = listOf(

codegen-client/src/main/kotlin/software/amazon/smithy/rust/codegen/client/smithy/protocols/HttpBoundProtocolGenerator.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ class HttpBoundProtocolTraitImplGenerator(
219219
if (errorShape.errorMessageMember() != null) {
220220
rust(
221221
"""
222-
if (&tmp.message).is_none() {
222+
if tmp.message.is_none() {
223223
tmp.message = _error_message;
224224
}
225225
""",

codegen-server/python/src/main/kotlin/software/amazon/smithy/rust/codegen/server/python/smithy/PythonServerCargoDependency.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ import software.amazon.smithy.rust.codegen.core.smithy.RuntimeConfig
1515
* For a dependency that is used in the client, or in both the client and the server, use [CargoDependency] directly.
1616
*/
1717
object PythonServerCargoDependency {
18-
val PyO3: CargoDependency = CargoDependency("pyo3", CratesIo("0.16"), features = setOf("extension-module"))
19-
val PyO3Asyncio: CargoDependency = CargoDependency("pyo3-asyncio", CratesIo("0.16"), features = setOf("attributes", "tokio-runtime"))
18+
val PyO3: CargoDependency = CargoDependency("pyo3", CratesIo("0.17"), features = setOf("extension-module"))
19+
val PyO3Asyncio: CargoDependency = CargoDependency("pyo3-asyncio", CratesIo("0.17"), features = setOf("attributes", "tokio-runtime"))
2020
val Tokio: CargoDependency = CargoDependency("tokio", CratesIo("1.20.1"), features = setOf("full"))
2121
val Tracing: CargoDependency = CargoDependency("tracing", CratesIo("0.1"))
2222
val Tower: CargoDependency = CargoDependency("tower", CratesIo("0.4"))

gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#
55

66
# Rust MSRV (entered into the generated README)
7-
rust.msrv=1.61.0
7+
rust.msrv=1.62.0
88

99
org.gradle.jvmargs=-Xmx1024M
1010

rust-runtime/aws-smithy-async/src/future/fn_stream.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ mod test {
200200
Box::pin(async move {
201201
for i in 0..5 {
202202
if i != 2 {
203-
if let Err(_) = tx.send(Ok(i)).await {
203+
if tx.send(Ok(i)).await.is_err() {
204204
return;
205205
}
206206
} else {

rust-runtime/aws-smithy-eventstream/src/frame.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,7 @@ mod message_tests {
601601
0x36,
602602
];
603603

604-
let result = Message::read_from(&mut Bytes::from_static(&data)).unwrap();
604+
let result = Message::read_from(&mut Bytes::from_static(data)).unwrap();
605605
assert_eq!(result.headers(), Vec::new());
606606

607607
let expected_payload = b"{'foo':'bar'}";
@@ -620,7 +620,7 @@ mod message_tests {
620620
0x7d, 0x8D, 0x9C, 0x08, 0xB1,
621621
];
622622

623-
let result = Message::read_from(&mut Bytes::from_static(&data)).unwrap();
623+
let result = Message::read_from(&mut Bytes::from_static(data)).unwrap();
624624
assert_eq!(
625625
result.headers(),
626626
vec![Header::new(

rust-runtime/aws-smithy-eventstream/src/str_bytes.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ mod tests {
151151
let str_bytes: StrBytes = valid_utf8.into();
152152
assert_eq!(valid_utf8.as_bytes(), str_bytes.as_bytes());
153153
assert_eq!(valid_utf8, str_bytes.as_str());
154-
assert_eq!(valid_utf8, str_bytes.clone().as_str());
154+
assert_eq!(valid_utf8, str_bytes.as_str());
155155
}
156156

157157
#[test]

rust-runtime/aws-smithy-http-server-python/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ lambda_http = "0.6.0"
2626
num_cpus = "1.13.1"
2727
parking_lot = "0.12.1"
2828
pin-project-lite = "0.2"
29-
pyo3 = "0.16.5"
30-
pyo3-asyncio = { version = "0.16.0", features = ["tokio-runtime"] }
29+
pyo3 = "0.17.0"
30+
pyo3-asyncio = { version = "0.17.0", features = ["tokio-runtime"] }
3131
signal-hook = { version = "0.3.14", features = ["extended-siginfo"] }
3232
socket2 = { version = "0.4.4", features = ["all"] }
3333
thiserror = "1.0.32"

rust-runtime/aws-smithy-http-server/src/instrumentation/sensitivity/sensitive.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,9 @@ mod tests {
9393
let sensitive = Sensitive(inner);
9494
let actual = format!("{}", sensitive);
9595
let expected = if cfg!(feature = "unredacted-logging") {
96-
format!("{}", inner)
96+
inner.to_string()
9797
} else {
98-
format!("{}", REDACTED)
98+
REDACTED.to_string()
9999
};
100100
assert_eq!(actual, expected)
101101
}

rust-runtime/aws-smithy-http-server/src/instrumentation/sensitivity/uri/label.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ mod tests {
186186
let originals = EXAMPLES.into_iter().map(Uri::from_static);
187187
for original in originals {
188188
let expected = original.path().to_string();
189-
let output = Label::new(&original.path(), |_| false, None).to_string();
189+
let output = Label::new(original.path(), |_| false, None).to_string();
190190
assert_eq!(output, expected, "original = {original}");
191191
}
192192
}
@@ -222,7 +222,7 @@ mod tests {
222222
let originals = EXAMPLES.into_iter().map(Uri::from_static);
223223
let expecteds = ALL_EXAMPLES.into_iter().map(Uri::from_static);
224224
for (original, expected) in originals.zip(expecteds) {
225-
let output = Label::new(&original.path(), |_| true, None).to_string();
225+
let output = Label::new(original.path(), |_| true, None).to_string();
226226
assert_eq!(output, expected.path(), "original = {original}");
227227
}
228228
}
@@ -258,7 +258,7 @@ mod tests {
258258
let originals = EXAMPLES.into_iter().map(Uri::from_static);
259259
let expecteds = GREEDY_EXAMPLES.into_iter().map(Uri::from_static);
260260
for (original, expected) in originals.zip(expecteds) {
261-
let output = Label::new(&original.path(), |_| false, Some(GreedyLabel::new(1, 0))).to_string();
261+
let output = Label::new(original.path(), |_| false, Some(GreedyLabel::new(1, 0))).to_string();
262262
assert_eq!(output, expected.path(), "original = {original}");
263263
}
264264
}
@@ -294,7 +294,7 @@ mod tests {
294294
let originals = EXAMPLES.into_iter().map(Uri::from_static);
295295
let expecteds = GREEDY_EXAMPLES_OFFSET.into_iter().map(Uri::from_static);
296296
for (original, expected) in originals.zip(expecteds) {
297-
let output = Label::new(&original.path(), |_| false, Some(GreedyLabel::new(1, 1))).to_string();
297+
let output = Label::new(original.path(), |_| false, Some(GreedyLabel::new(1, 1))).to_string();
298298
assert_eq!(output, expected.path(), "original = {original}");
299299
}
300300
}
@@ -321,7 +321,7 @@ mod tests {
321321
let originals = EXTRA_EXAMPLES_UNREDACTED.into_iter().map(Uri::from_static);
322322
let expecteds = EXTRA_EXAMPLES_REDACTED.into_iter().map(Uri::from_static);
323323
for (original, expected) in originals.zip(expecteds) {
324-
let output = Label::new(&original.path(), |_| false, Some(GreedyLabel::new(2, 5))).to_string();
324+
let output = Label::new(original.path(), |_| false, Some(GreedyLabel::new(2, 5))).to_string();
325325
assert_eq!(output, expected.path(), "original = {original}");
326326
}
327327
}

rust-runtime/aws-smithy-http-server/src/instrumentation/sensitivity/uri/query.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ mod tests {
131131
let originals = EXAMPLES.into_iter().chain(QUERY_STRING_EXAMPLES).map(Uri::from_static);
132132
for original in originals {
133133
if let Some(query) = original.query() {
134-
let output = Query::new(&query, |_| QueryMarker::default()).to_string();
134+
let output = Query::new(query, |_| QueryMarker::default()).to_string();
135135
assert_eq!(output, query, "original = {original}");
136136
}
137137
}
@@ -142,7 +142,7 @@ mod tests {
142142
let originals = QUERY_STRING_EXAMPLES.into_iter().map(Uri::from_static);
143143
let expecteds = ALL_KEYS_QUERY_STRING_EXAMPLES.into_iter().map(Uri::from_static);
144144
for (original, expected) in originals.zip(expecteds) {
145-
let output = Query::new(&original.query().unwrap(), |_| QueryMarker {
145+
let output = Query::new(original.query().unwrap(), |_| QueryMarker {
146146
key: true,
147147
value: false,
148148
})
@@ -156,7 +156,7 @@ mod tests {
156156
let originals = QUERY_STRING_EXAMPLES.into_iter().map(Uri::from_static);
157157
let expecteds = ALL_VALUES_QUERY_STRING_EXAMPLES.into_iter().map(Uri::from_static);
158158
for (original, expected) in originals.zip(expecteds) {
159-
let output = Query::new(&original.query().unwrap(), |_| QueryMarker {
159+
let output = Query::new(original.query().unwrap(), |_| QueryMarker {
160160
key: false,
161161
value: true,
162162
})
@@ -170,7 +170,7 @@ mod tests {
170170
let originals = QUERY_STRING_EXAMPLES.into_iter().map(Uri::from_static);
171171
let expecteds = ALL_PAIRS_QUERY_STRING_EXAMPLES.into_iter().map(Uri::from_static);
172172
for (original, expected) in originals.zip(expecteds) {
173-
let output = Query::new(&original.query().unwrap(), |_| QueryMarker { key: true, value: true }).to_string();
173+
let output = Query::new(original.query().unwrap(), |_| QueryMarker { key: true, value: true }).to_string();
174174
assert_eq!(output, expected.query().unwrap(), "original = {original}");
175175
}
176176
}
@@ -180,7 +180,7 @@ mod tests {
180180
let originals = QUERY_STRING_EXAMPLES.into_iter().map(Uri::from_static);
181181
let expecteds = X_QUERY_STRING_EXAMPLES.into_iter().map(Uri::from_static);
182182
for (original, expected) in originals.zip(expecteds) {
183-
let output = Query::new(&original.query().unwrap(), |key| QueryMarker {
183+
let output = Query::new(original.query().unwrap(), |key| QueryMarker {
184184
key: false,
185185
value: key == "x",
186186
})

rust-runtime/aws-smithy-http-server/src/protocols.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ mod tests {
181181
);
182182
assert_eq!(found_mime, invalid_mime.parse::<mime::Mime>().ok());
183183
}
184-
_ => panic!("Unexpected `MissingContentTypeReason`: {}", e.to_string()),
184+
_ => panic!("Unexpected `MissingContentTypeReason`: {}", e),
185185
},
186186
}
187187
}

0 commit comments

Comments
 (0)