fips 1.0.1

A powerful mock server supported by a plugin system
Documentation
use serde::{Deserialize, Serialize};
use schemars::JsonSchema;
use crate::configuration::configuration::Plugin;

#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct With {
    pub sleep: Option<u64>,
    pub probability: Option<f32>,
    pub plugins: Option<Vec<Plugin>>,
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_with_deserialization_all_fields() {
        let yaml = r#"
sleep: 1000
probability: 0.75
plugins:
  - name: TestPlugin
    path: "./plugins/test.so"
"#;
        let with: Result<With, _> = serde_yaml::from_str(yaml);
        assert!(with.is_ok());
        
        let with = with.unwrap();
        assert_eq!(with.sleep, Some(1000));
        assert_eq!(with.probability, Some(0.75));
        assert!(with.plugins.is_some());
    }

    #[test]
    fn test_with_deserialization_optional_fields() {
        let yaml = r#"
probability: 1.0
"#;
        let with: Result<With, _> = serde_yaml::from_str(yaml);
        assert!(with.is_ok());
        
        let with = with.unwrap();
        assert!(with.sleep.is_none());
        assert_eq!(with.probability, Some(1.0));
        assert!(with.plugins.is_none());
    }

    #[test]
    fn test_with_probability_bounds() {
        let yaml_low = r#"
probability: 0.0
"#;
        let with: Result<With, _> = serde_yaml::from_str(yaml_low);
        assert!(with.is_ok());
        assert_eq!(with.unwrap().probability, Some(0.0));

        let yaml_high = r#"
probability: 1.0
"#;
        let with: Result<With, _> = serde_yaml::from_str(yaml_high);
        assert!(with.is_ok());
        assert_eq!(with.unwrap().probability, Some(1.0));
    }
}