实现思路
- 定义
DatabaseError
和ApplicationError
这两个自定义错误类型。
- 在
DatabaseOperation
结构体的方法中,通过Result
类型来处理可能出现的DatabaseError
。
- 根据不同的业务场景,在方法调用链中,使用
map_err
等方法将DatabaseError
转换为ApplicationError
,或者直接传播错误。
代码示例
// 定义DatabaseError自定义错误类型
#[derive(Debug)]
struct DatabaseError {
message: String,
}
// 定义ApplicationError自定义错误类型
#[derive(Debug)]
struct ApplicationError {
message: String,
}
// DatabaseOperation结构体
struct DatabaseOperation;
impl DatabaseOperation {
// 模拟数据库查询方法,可能返回DatabaseError
fn query_database(&self) -> Result<String, DatabaseError> {
// 这里简单模拟返回一个错误,实际应用中可能是真正的数据库操作
Err(DatabaseError {
message: "Database query failed".to_string(),
})
}
// 业务方法,调用query_database并处理错误
fn business_operation(&self) -> Result<String, ApplicationError> {
self.query_database()
.map_err(|db_err| ApplicationError {
message: format!("Business operation failed due to: {}", db_err.message),
})
}
}
fn main() {
let db_operation = DatabaseOperation;
match db_operation.business_operation() {
Ok(result) => println!("Result: {}", result),
Err(app_err) => eprintln!("Application Error: {:?}", app_err),
}
}