Skip to main content

protocheck_core/validators/
constants.rs

1use paste::paste;
2use proto_types::{Duration, Timestamp};
3
4use crate::{
5  field_data::FieldContext,
6  protovalidate::Violation,
7  validators::static_data::{base_violations::create_violation, const_violations::*},
8};
9
10macro_rules! const_validator {
11  ($proto_type:ident, $value_type:ty) => {
12    paste! {
13      pub fn [< $proto_type _const>](field_context: &FieldContext, value: $value_type, target: $value_type, error_message: &'static str) -> Result<(), Violation> {
14        let check = value == target;
15
16        create_violation!($proto_type, check, field_context, const, error_message)
17      }
18    }
19  };
20}
21
22#[cfg(feature = "bytes")]
23pub fn bytes_const(
24  field_context: &FieldContext,
25  value: &bytes::Bytes,
26  target: &'static [u8],
27  error_message: &'static str,
28) -> Result<(), Violation> {
29  let check = value == target;
30
31  create_violation!(bytes, check, field_context, const, error_message)
32}
33
34const_validator!(string, &str);
35const_validator!(bool, bool);
36
37const_validator!(duration, Duration);
38const_validator!(timestamp, Timestamp);
39
40const_validator!(float, f32);
41const_validator!(double, f64);
42
43const_validator!(int64, i64);
44const_validator!(int32, i32);
45const_validator!(sint64, i64);
46const_validator!(sint32, i32);
47const_validator!(sfixed64, i64);
48const_validator!(sfixed32, i32);
49
50const_validator!(uint64, u64);
51const_validator!(uint32, u32);
52const_validator!(fixed64, u64);
53const_validator!(fixed32, u32);
54
55const_validator!(enum, i32);