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
literal 0
HcmV?d00001
diff --git a/chapter10-error/error.md b/chapter10-error/error.md
new file mode 100644
index 0000000..733e21f
--- /dev/null
+++ b/chapter10-error/error.md
@@ -0,0 +1,153 @@
+# error
+
+![img.png](error-situation.png)
+
+Rust 偷师 Haskell,构建了对标 Maybe 的 Option 类型和 对标 Either 的 Result 类型。
+
+![img.png](option_n_result.png)
+
+## ? 操作符
+
+早期 Rust 提供了 try! 宏来简化错误的显式处理,后来为了进一步提升用户体验,try! 被进化成 ? 操作符
+
+如果你只想传播错误,不想就地处理,可以用 ? 操作符
+
+## Error trait 和错误类型的转换
+
+```rust
+// intellij-rust/stdlib-local-copy/1.78.0-ba6645f9113d6a36b36e041b03064c99e1ae9e85/library/core/src/error.rs
+pub trait Error: Debug + Display {
+ #[stable(feature = "error_source", since = "1.30.0")]
+ fn source(&self) -> Option<&(dyn Error + 'static)> {
+ None
+ }
+
+ /// Gets the `TypeId` of `self`.
+ #[doc(hidden)]
+ #[unstable(
+ feature = "error_type_id",
+ reason = "this is memory-unsafe to override in user code",
+ issue = "60784"
+ )]
+ fn type_id(&self, _: private::Internal) -> TypeId
+ where
+ Self: 'static,
+ {
+ TypeId::of::()
+ }
+
+ #[stable(feature = "rust1", since = "1.0.0")]
+ #[deprecated(since = "1.42.0", note = "use the Display impl or to_string()")]
+ fn description(&self) -> &str {
+ "description() is deprecated; use Display"
+ }
+
+ #[stable(feature = "rust1", since = "1.0.0")]
+ #[deprecated(
+ since = "1.33.0",
+ note = "replaced by Error::source, which can support downcasting"
+ )]
+ #[allow(missing_docs)]
+ fn cause(&self) -> Option<&dyn Error> {
+ self.source()
+ }
+
+ /// ```
+ #[unstable(feature = "error_generic_member_access", issue = "99301")]
+ #[allow(unused_variables)]
+ fn provide<'a>(&'a self, request: &mut Request<'a>) {}
+}
+```
+
+## thiserror
+
+```rust
+use thiserror::Error;
+#[derive(Error, Debug)]
+#[non_exhaustive]
+pub enum DataStoreError {
+ #[error("data store disconnected")]
+ Disconnect(#[from] io::Error),
+ #[error("the data for key `{0}` is not available")]
+ Redaction(String),
+ #[error("invalid header (expected {expected:?}, found {found:?})")]
+ InvalidHeader {
+ expected: String,
+ found: String,
+ },
+ #[error("unknown data store error")]
+ Unknown,
+}
+```
+
+不使用 thiserror
+
+```rust
+use std::fmt;
+
+#[derive(Debug)]
+enum DataFetchError {
+ HttpError(u16),
+ Timeout,
+ InvalidPayload,
+}
+
+impl fmt::Display for DataFetchError {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ match self {
+ Self::HttpError(code) => write!(f, "HTTP error with code: {}", code),
+ Self::Timeout => write!(f, "Data fetching timed out"),
+ Self::InvalidPayload => write!(f, "Invalid payload received"),
+ }
+ }
+}
+
+impl std::error::Error for DataFetchError {}
+
+#[derive(Debug)]
+enum DatabaseError {
+ ConnectionFailed,
+ WriteFailed(String),
+}
+
+impl fmt::Display for DatabaseError {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ match self {
+ Self::ConnectionFailed => write!(f, "Failed to connect to database"),
+ Self::WriteFailed(reason) => write!(f, "Failed to write to database: {}", reason),
+ }
+ }
+}
+
+impl std::error::Error for DatabaseError {}
+```
+
+使用 thiserror
+
+```rust
+use thiserror::Error;
+
+#[derive(Debug, Error)]
+enum DataFetchError {
+ #[error("HTTP error with code: {0}")]
+ HttpError(u16),
+ #[error("Data fetching timed out")]
+ Timeout,
+ #[error("Invalid payload received")]
+ InvalidPayload,
+}
+
+#[derive(Debug, Error)]
+enum DatabaseError {
+ #[error("Failed to connect to database")]
+ ConnectionFailed,
+ #[error("Failed to write to database: {0}")]
+ WriteFailed(String),
+}
+
+```
+
+- 代码减少: 对于每种错误类型,我们都不再需要单独的Display和Error trait实现。这大大减少了样板代码,并提高了代码的可读性。
+- 错误消息与定义在一起: 使用thiserror,我们可以直接在错误定义旁边写出错误消息。这使得代码更加组织化,方便查找和修改。
+- 可维护性增加: 如果我们要添加或删除错误类型,只需要修改枚举定义并更新错误消息即可,而不需要在其他地方进行更改
+
diff --git a/chapter10-error/option_n_result.png b/chapter10-error/option_n_result.png
new file mode 100644
index 0000000000000000000000000000000000000000..156e2ee4430c7950c49b2333fdb3545f1ffa9248
GIT binary patch
literal 17846
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