-
Notifications
You must be signed in to change notification settings - Fork 343
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Error handling improvements Change how we handle error types to be more ergonomic: - Replace Cow with String: Diagnostics are serialized into JSON as soon as the function returns, which means that their value is copied right away. The performance improvement of using Cow is minimal in this case, but it has some ergonomic implications because we have to handle their lifetimes. By removing the explicit lifetimes, people can return Diagnostic values with static lifetimes which was not possible before. - Add `IntoDiagnostic` trait. This is a helper trait to facilitate transforming value types into Diagnostic. It gives external crates a better mechanism to transform values into `Diagnostic`. - Add features to implement `IntoDiagnostic` for anyhow, eyre, and miette error types. This helps people that use those creates to transform their errors into `Diagnostic` without double boxing their errors. * Recommend to implement `From`. Signed-off-by: David Calavera <[email protected]> * Simplify implementation, remove `IntoDiagnostic` We can implement `From<T> for Diagnostic` for error crates. * Remove implementation for From<Box<T>> Signed-off-by: David Calavera <[email protected]> * Document features in Cargo.toml Signed-off-by: David Calavera <[email protected]> --------- Signed-off-by: David Calavera <[email protected]>
- Loading branch information
Showing
21 changed files
with
275 additions
and
131 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
[package] | ||
name = "basic-error-error-crates-integration" | ||
version = "0.1.0" | ||
edition = "2021" | ||
|
||
[dependencies] | ||
anyhow = "1" | ||
eyre = "0.6.12" | ||
lambda_runtime = { path = "../../lambda-runtime", features = ["anyhow", "eyre", "miette"] } | ||
miette = "7.2.0" | ||
serde = "1" | ||
tokio = { version = "1", features = ["macros"] } |
6 changes: 4 additions & 2 deletions
6
examples/basic-error-anyhow/README.md → ...-error-error-crates-integration/README.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
use lambda_runtime::{run, service_fn, Diagnostic, Error, LambdaEvent}; | ||
use serde::Deserialize; | ||
|
||
#[derive(Deserialize)] | ||
#[serde(rename_all = "camelCase")] | ||
enum ErrorType { | ||
Anyhow, | ||
Eyre, | ||
Miette, | ||
} | ||
|
||
#[derive(Deserialize)] | ||
struct Request { | ||
error_type: ErrorType, | ||
} | ||
|
||
fn anyhow_error() -> anyhow::Result<()> { | ||
anyhow::bail!("This is an error message from Anyhow"); | ||
} | ||
|
||
fn eyre_error() -> eyre::Result<()> { | ||
eyre::bail!("This is an error message from Eyre"); | ||
} | ||
|
||
fn miette_error() -> miette::Result<()> { | ||
miette::bail!("This is an error message from Miette"); | ||
} | ||
|
||
/// Transform an anyhow::Error, eyre::Report, or miette::Report into a lambda_runtime::Diagnostic. | ||
/// It does it by enabling the feature `anyhow`, `eyre` or `miette` in the runtime dependency. | ||
/// Those features enable the implementation of `From<T> for Diagnostic` | ||
/// for `anyhow::Error`, `eyre::Report`, and `miette::Report`. | ||
async fn function_handler(event: LambdaEvent<Request>) -> Result<(), Diagnostic> { | ||
match event.payload.error_type { | ||
ErrorType::Anyhow => anyhow_error().map_err(|e| e.into()), | ||
ErrorType::Eyre => eyre_error().map_err(|e| e.into()), | ||
ErrorType::Miette => miette_error().map_err(|e| e.into()), | ||
} | ||
} | ||
|
||
#[tokio::main] | ||
async fn main() -> Result<(), Error> { | ||
run(service_fn(function_handler)).await | ||
} |
File renamed without changes.
2 changes: 1 addition & 1 deletion
2
examples/basic-error-diagnostic/Cargo.toml → examples/basic-error-thiserror/Cargo.toml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
[package] | ||
name = "basic-error-diagnostic" | ||
name = "basic-error-thiserror" | ||
version = "0.1.0" | ||
edition = "2021" | ||
|
||
|
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.