Rust/From
code:.rs
pub trait From<T> {
fn from(value: T) -> Self;
}
Rustのtrait
ある型から型へのキャストを実装する
これを実装することでRust/?演算子などで恩恵を受けられる.
code:.rs
#derive(Debug)
struct SourceError {
message: &'static str,
}
#derive(Debug)
enum AppError {
Source(SourceError),
}
impl From<SourceError> for AppError {
fn from(error: SourceError) -> Self {
Self::Source(error)
}
}
fn execute() -> Result<String, AppError> {
// load_from_database() のエラーは SourceError
// execute() のエラーは AppError
//
// ? が From<SourceError> for AppError を使って変換する
let record = load_from_database()?;
Ok(record)
}