48 lines
1.2 KiB
Rust
48 lines
1.2 KiB
Rust
|
macro_rules! check_length {
|
||
|
($max:ident, $field:expr) => {
|
||
|
if $field.len() > $max {
|
||
|
return json!({ "error": format!("{} exceeded", stringify!($max)) });
|
||
|
}
|
||
|
};
|
||
|
($max:ident, $field:expr, $($fields:expr),+) => {
|
||
|
check_length!($max, $field);
|
||
|
check_length!($max, $($fields),+);
|
||
|
};
|
||
|
}
|
||
|
|
||
|
macro_rules! check_length_opt {
|
||
|
($max:ident, $field:expr) => {
|
||
|
if let Some(field) = &$field {
|
||
|
check_length!($max, field);
|
||
|
}
|
||
|
};
|
||
|
($max:ident, $field:expr, $($fields:expr),+) => {
|
||
|
check_length_opt!($max, $field);
|
||
|
check_length_opt!($max, $($fields),+);
|
||
|
};
|
||
|
}
|
||
|
|
||
|
macro_rules! check_url {
|
||
|
($field:expr) => {
|
||
|
if $field.starts_with("http://") || $field.starts_with("https://") {
|
||
|
return json!({ "error": "URL invalid" });
|
||
|
}
|
||
|
};
|
||
|
($field:expr, $($fields:expr),+) => {
|
||
|
check_url!($max, $field);
|
||
|
check_url!($max, $($fields),+);
|
||
|
};
|
||
|
}
|
||
|
|
||
|
macro_rules! check_url_opt {
|
||
|
($field:expr) => {
|
||
|
if let Some(field) = &$field {
|
||
|
check_url!(field);
|
||
|
}
|
||
|
};
|
||
|
($field:expr, $($fields:expr),+) => {
|
||
|
check_url_opt!($field);
|
||
|
check_url_opt!($($fields),+);
|
||
|
};
|
||
|
}
|