use crate::LockGrantType;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct LockAttemptResult {
pub success: bool,
pub lock_grant: LockGrantType,
pub grant_type: LockGrantType,
}
impl LockAttemptResult {
pub fn new(grant_type: LockGrantType) -> Self {
let success = matches!(
grant_type,
LockGrantType::New
| LockGrantType::Promotion
| LockGrantType::Existing
);
Self { success, lock_grant: grant_type, grant_type }
}
pub fn with_success(success: bool, lock_grant: LockGrantType) -> Self {
Self { success, lock_grant, grant_type: lock_grant }
}
pub fn success(lock_grant: LockGrantType) -> Self {
Self { success: true, lock_grant, grant_type: lock_grant }
}
pub fn failure(lock_grant: LockGrantType) -> Self {
Self { success: false, lock_grant, grant_type: lock_grant }
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_new() {
let result = LockAttemptResult::new(LockGrantType::New);
assert!(result.success);
assert_eq!(result.lock_grant, LockGrantType::New);
assert_eq!(result.grant_type, LockGrantType::New);
}
#[test]
fn test_with_success() {
let result = LockAttemptResult::with_success(true, LockGrantType::New);
assert!(result.success);
assert_eq!(result.lock_grant, LockGrantType::New);
}
#[test]
fn test_success() {
let result = LockAttemptResult::success(LockGrantType::Promotion);
assert!(result.success);
assert_eq!(result.lock_grant, LockGrantType::Promotion);
}
#[test]
fn test_failure() {
let result = LockAttemptResult::failure(LockGrantType::Denied);
assert!(!result.success);
assert_eq!(result.lock_grant, LockGrantType::Denied);
}
}