enum FetchError {
// 定义获取数据可能的错误
NetworkError,
ServerError,
}
enum ValidationError {
// 定义验证数据可能的错误
AgeInvalid,
NameInvalid,
}
struct UserData {
age: u8,
name: String,
}
fn fetch_user_data() -> Result<UserData, FetchError> {
// 模拟获取用户数据
Err(FetchError::NetworkError)
}
fn validate_user(user_data: UserData) -> Result<(), ValidationError> {
// 模拟验证用户数据
if user_data.age < 18 {
Err(ValidationError::AgeInvalid)
} else if user_data.name.is_empty() {
Err(ValidationError::NameInvalid)
} else {
Ok(())
}
}
fn main() {
let result = fetch_user_data()
.and_then(|user_data| {
validate_user(user_data)
.map(|_| user_data)
})
.map(|user_data| {
println!("姓名: {}, 年龄: {}", user_data.name, user_data.age);
});
match result {
Ok(_) => (),
Err(error) => match error {
FetchError::NetworkError => println!("获取数据时网络错误"),
FetchError::ServerError => println!("获取数据时服务器错误"),
ValidationError::AgeInvalid => println!("年龄验证失败"),
ValidationError::NameInvalid => println!("姓名验证失败"),
},
}
}