use super::{FulfillmentStrategy, NetworkMode};
#[derive(Debug, thiserror::Error)]
pub enum ValidationError {
#[error("FulfillmentStrategy::{strategy:?} is not compatible with NetworkMode::{mode:?}")]
IncompatibleStrategy {
strategy: FulfillmentStrategy,
mode: NetworkMode,
},
}
pub fn validate_strategy_compatibility(
mode: NetworkMode,
strategy: FulfillmentStrategy,
) -> Result<(), ValidationError> {
match (mode, strategy) {
(NetworkMode::Mainnet, FulfillmentStrategy::Auction)
| (NetworkMode::Reserved, FulfillmentStrategy::Hosted | FulfillmentStrategy::Reserved) => {
Ok(())
}
(mode, strategy) => Err(ValidationError::IncompatibleStrategy { strategy, mode }),
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_valid_combinations() {
assert!(validate_strategy_compatibility(
NetworkMode::Mainnet,
FulfillmentStrategy::Auction
)
.is_ok());
assert!(validate_strategy_compatibility(
NetworkMode::Reserved,
FulfillmentStrategy::Hosted
)
.is_ok());
assert!(validate_strategy_compatibility(
NetworkMode::Reserved,
FulfillmentStrategy::Reserved
)
.is_ok());
}
#[test]
fn test_invalid_combinations() {
assert!(validate_strategy_compatibility(
NetworkMode::Reserved,
FulfillmentStrategy::Auction
)
.is_err());
assert!(validate_strategy_compatibility(NetworkMode::Mainnet, FulfillmentStrategy::Hosted)
.is_err());
assert!(validate_strategy_compatibility(
NetworkMode::Mainnet,
FulfillmentStrategy::Reserved
)
.is_err());
}
}