use simple_middleware::Manager;
#[tokio::main]
async fn main() {
let manager = Manager::last(|payload: Payload, _| async move {
let id = std::time::SystemTime::now();
let user = User {
id: format!("{:?}", id),
username: format!("{}{}", &payload.email, &payload.age),
};
UserCreatedResult {
success: true,
message: "User created successfully".to_string(),
user: Some(user),
}
})
.await;
manager
.next(|payload, next| async move {
if payload.age < 18 {
return UserCreatedResult {
success: false,
message: "User is under 18".to_string(),
user: None,
};
}
next.call(payload).await
})
.await;
let fail_result = manager
.send(Payload {
email: "foo@example.com".to_string(),
age: 10,
})
.await;
println!(
"user created: {}, message: {}, {:?}",
&fail_result.success, &fail_result.message, &fail_result.user
);
let success_result = manager
.send(Payload {
email: "foo@example.com".to_string(),
age: 25,
})
.await;
println!(
"user created: {}, message: {}, user: {:?}",
&success_result.success, &success_result.message, &success_result.user
);
}
struct Payload {
email: String,
age: u16,
}
#[derive(Debug)]
#[allow(dead_code)]
struct User {
pub id: String,
pub username: String,
}
struct UserCreatedResult {
success: bool,
message: String,
user: Option<User>,
}