use alloc::string::String;
use serde::{
Deserialize,
Serialize,
};
use serde_string_enum::{
DeserializeLabeledStringEnum,
SerializeLabeledStringEnum,
};
use crate::SerializedRuleSet;
#[derive(Debug, Clone, PartialEq, Eq, SerializeLabeledStringEnum, DeserializeLabeledStringEnum)]
pub enum ClauseValueType {
#[string = "Type"]
Type,
#[string = "PositiveInteger"]
PositiveInteger,
#[string = "NonNegativeInteger"]
NonNegativeInteger,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct ClauseData {
pub name: String,
pub description: String,
#[serde(default)]
pub rule_log: Option<String>,
#[serde(default)]
pub requires_value: bool,
#[serde(default)]
pub value_type: Option<ClauseValueType>,
#[serde(default)]
pub default_value: String,
#[serde(default)]
pub rules: SerializedRuleSet,
#[serde(default)]
pub effect: serde_json::Value,
}
#[cfg(test)]
mod clause_value_type_test {
use crate::{
ClauseValueType,
test_util::{
test_string_deserialization,
test_string_serialization,
},
};
#[test]
fn serializes_to_string() {
test_string_serialization(ClauseValueType::Type, "Type");
test_string_serialization(ClauseValueType::PositiveInteger, "PositiveInteger");
test_string_serialization(ClauseValueType::NonNegativeInteger, "NonNegativeInteger");
}
#[test]
fn deserializes_lowercase() {
test_string_deserialization("type", ClauseValueType::Type);
test_string_deserialization("positiveinteger", ClauseValueType::PositiveInteger);
test_string_deserialization("nonnegativeinteger", ClauseValueType::NonNegativeInteger);
}
}