async_graphql/validators/
multiple_of.rs1use std::{fmt::Display, ops::Rem};
2
3use num_traits::{AsPrimitive, Zero};
4
5use crate::{InputType, InputValueError};
6
7pub fn multiple_of<T, N>(value: &T, n: N) -> Result<(), InputValueError<T>>
8where
9 T: AsPrimitive<N> + InputType,
10 N: Rem<Output = N> + Zero + Display + Copy + PartialEq + 'static,
11{
12 let value = value.as_();
13 if !value.is_zero() && value % n == N::zero() {
14 Ok(())
15 } else {
16 Err(format!("the value must be a multiple of {}.", n).into())
17 }
18}
19
20#[cfg(test)]
21mod tests {
22 use super::*;
23
24 #[test]
25 fn test_multiple_of() {
26 assert!(multiple_of(&5, 3).is_err());
27 assert!(multiple_of(&6, 3).is_ok());
28 assert!(multiple_of(&0, 3).is_err());
29 }
30}