generated from amazon-archives/__template_Apache-2.0
-
Notifications
You must be signed in to change notification settings - Fork 220
Open
Labels
serverRust server SDKRust server SDK
Description
We're currently serializing server framework-level errors manually. We're doing this for each protocol. For example, for restJson1
:
smithy-rs/rust-runtime/aws-smithy-http-server/src/protocol/rest_json_1/runtime_error.rs
Lines 92 to 108 in b748878
impl IntoResponse<RestJson1> for RuntimeError { | |
fn into_response(self) -> http::Response<crate::body::BoxBody> { | |
let res = http::Response::builder() | |
.status(self.status_code()) | |
.header("Content-Type", "application/json") | |
.header("X-Amzn-Errortype", self.name()) | |
.extension(RuntimeErrorExtension::new(self.name().to_string())); | |
let body = match self { | |
RuntimeError::Validation(reason) => crate::body::to_boxed(reason), | |
_ => crate::body::to_boxed("{}"), | |
}; | |
res.body(body) | |
.expect(INVALID_HTTP_RESPONSE_FOR_RUNTIME_ERROR_PANIC_MESSAGE) | |
} | |
} |
Instead of manually writing this serialization code, we should model these errors as Smithy structure shapes with the @error
trait, adjoin them automatically to all models, and leverage the code-generated serializers. This is the approach that smithy-typescript uses.
This has the advantage of reducing the amount of code that we need to maintain, and reducing possible bugs introduced in the manual implementations that don't honor the protocol specifications.
Metadata
Metadata
Assignees
Labels
serverRust server SDKRust server SDK