设计思路
- 定义结构体:分别定义
User
和Database
结构体,User
结构体用于存储用户信息,Database
结构体用于封装数据库交互相关的方法。
- 定义错误类型:创建一个自定义的错误枚举,用于表示在验证过程中可能出现的各种错误情况。
- 数据库读取方法:在
Database
结构体中实现读取用户信息的方法,该方法返回Result<User, 自定义错误类型>
。
- 用户信息验证方法:在
User
结构体上实现验证方法,该方法也返回Result<(), 自定义错误类型>
,在方法中进行年龄和邮箱格式等复杂验证。
- 业务逻辑整合:在业务逻辑函数中,先从数据库读取用户信息,然后对读取到的用户信息进行验证,根据验证结果返回相应的
Result
。
核心代码片段
// 定义自定义错误类型
#[derive(Debug)]
enum UserValidationError {
AgeInvalid,
EmailFormatInvalid,
DatabaseReadError,
}
// User结构体
struct User {
age: u8,
email: String,
}
// Database结构体
struct Database {
// 这里可包含数据库连接等相关字段
}
impl Database {
// 从数据库读取用户信息的方法
fn read_user(&self) -> Result<User, UserValidationError> {
// 实际实现中这里应该是与数据库交互获取数据
// 这里简单模拟返回一个用户信息
Ok(User {
age: 25,
email: "example@example.com".to_string(),
})
}
}
impl User {
// 用户信息验证方法
fn validate(&self) -> Result<(), UserValidationError> {
if self.age < 18 || self.age > 120 {
return Err(UserValidationError::AgeInvalid);
}
if!self.email.contains('@') {
return Err(UserValidationError::EmailFormatInvalid);
}
Ok(())
}
}
// 业务逻辑函数
fn business_logic() -> Result<(), UserValidationError> {
let db = Database {};
let user = db.read_user()?;
user.validate()
}