use super::Message;
use crate::{
rule::{string::StringRule, Rule},
Value,
};
#[derive(Clone, Copy, Debug)]
pub struct Required;
const NAME: &str = "required";
impl Rule for Required {
type Message = Message;
const NAME: &'static str = NAME;
fn message(&self) -> Self::Message {
Message::new(super::MessageKind::Required)
}
fn call(&mut self, value: &mut Value) -> bool {
match value {
Value::String(s) => !s.is_empty(),
Value::Array(arr) => !arr.is_empty(),
Value::Map(map) => !map.is_empty(),
_ => true,
}
}
}
impl StringRule for Required {
type Message = Message;
const NAME: &'static str = NAME;
fn message(&self) -> Self::Message {
Message::new(super::MessageKind::Required)
}
fn call(&mut self, value: &mut String) -> bool {
!value.is_empty()
}
}