113 lines
3.5 KiB
Plaintext
113 lines
3.5 KiB
Plaintext
|
|
# Common Validators
|
||
|
|
# Reusable validation logic for ports, positive numbers, strings, ranges
|
||
|
|
|
||
|
|
let constraints = import "../constraints/constraints.toml" in
|
||
|
|
|
||
|
|
{
|
||
|
|
# Validate port number within allowed range
|
||
|
|
ValidPort = fun port =>
|
||
|
|
if port < constraints.common.server.port.min then
|
||
|
|
std.contract.blame_with_message
|
||
|
|
"Port must be >= %{std.to_string constraints.common.server.port.min}"
|
||
|
|
port
|
||
|
|
else if port > constraints.common.server.port.max then
|
||
|
|
std.contract.blame_with_message
|
||
|
|
"Port must be <= %{std.to_string constraints.common.server.port.max}"
|
||
|
|
port
|
||
|
|
else
|
||
|
|
port,
|
||
|
|
|
||
|
|
# Validate positive number (> 0)
|
||
|
|
ValidPositiveNumber = fun n =>
|
||
|
|
if n <= 0 then
|
||
|
|
std.contract.blame_with_message "Value must be positive (> 0)" n
|
||
|
|
else
|
||
|
|
n,
|
||
|
|
|
||
|
|
# Validate non-negative number (>= 0)
|
||
|
|
ValidNonNegativeNumber = fun n =>
|
||
|
|
if n < 0 then
|
||
|
|
std.contract.blame_with_message "Value must be non-negative (>= 0)" n
|
||
|
|
else
|
||
|
|
n,
|
||
|
|
|
||
|
|
# Validate non-empty string
|
||
|
|
ValidNonEmptyString = fun s =>
|
||
|
|
if s == "" then
|
||
|
|
std.contract.blame_with_message "String cannot be empty" s
|
||
|
|
else
|
||
|
|
s,
|
||
|
|
|
||
|
|
# Validate string length
|
||
|
|
ValidStringLength = fun min_len max_len value =>
|
||
|
|
let len = std.string.length value in
|
||
|
|
if len < min_len then
|
||
|
|
std.contract.blame_with_message
|
||
|
|
"String length must be >= %{std.to_string min_len}"
|
||
|
|
value
|
||
|
|
else if len > max_len then
|
||
|
|
std.contract.blame_with_message
|
||
|
|
"String length must be <= %{std.to_string max_len}"
|
||
|
|
value
|
||
|
|
else
|
||
|
|
value,
|
||
|
|
|
||
|
|
# Validate generic range (min to max inclusive)
|
||
|
|
ValidRange = fun min_val max_val value =>
|
||
|
|
if value < min_val then
|
||
|
|
std.contract.blame_with_message
|
||
|
|
"Value must be >= %{std.to_string min_val}, got %{std.to_string value}"
|
||
|
|
value
|
||
|
|
else if value > max_val then
|
||
|
|
std.contract.blame_with_message
|
||
|
|
"Value must be <= %{std.to_string max_val}, got %{std.to_string value}"
|
||
|
|
value
|
||
|
|
else
|
||
|
|
value,
|
||
|
|
|
||
|
|
# Validate enum value in allowed set
|
||
|
|
ValidEnum = fun allowed_values value =>
|
||
|
|
if std.array.elem value allowed_values then
|
||
|
|
value
|
||
|
|
else
|
||
|
|
std.contract.blame_with_message
|
||
|
|
"Value must be one of: %{std.to_string allowed_values}"
|
||
|
|
value,
|
||
|
|
|
||
|
|
# Validate timeout duration in milliseconds
|
||
|
|
ValidTimeoutMs = fun timeout =>
|
||
|
|
if timeout < 1000 then
|
||
|
|
std.contract.blame_with_message "Timeout must be >= 1000ms (1 second)" timeout
|
||
|
|
else if timeout > 86400000 then
|
||
|
|
std.contract.blame_with_message "Timeout must be <= 86400000ms (24 hours)" timeout
|
||
|
|
else
|
||
|
|
timeout,
|
||
|
|
|
||
|
|
# Validate interval/period in seconds
|
||
|
|
ValidIntervalSeconds = fun interval =>
|
||
|
|
if interval < 1 then
|
||
|
|
std.contract.blame_with_message "Interval must be >= 1 second" interval
|
||
|
|
else if interval > 3600 then
|
||
|
|
std.contract.blame_with_message "Interval must be <= 3600 seconds (1 hour)" interval
|
||
|
|
else
|
||
|
|
interval,
|
||
|
|
|
||
|
|
# Validate percentage (0-100)
|
||
|
|
ValidPercentage = fun percentage =>
|
||
|
|
if percentage < 0 then
|
||
|
|
std.contract.blame_with_message "Percentage must be >= 0" percentage
|
||
|
|
else if percentage > 100 then
|
||
|
|
std.contract.blame_with_message "Percentage must be <= 100" percentage
|
||
|
|
else
|
||
|
|
percentage,
|
||
|
|
|
||
|
|
# Validate sample rate (0.0-1.0)
|
||
|
|
ValidSampleRate = fun rate =>
|
||
|
|
if rate < 0.0 then
|
||
|
|
std.contract.blame_with_message "Sample rate must be >= 0.0" rate
|
||
|
|
else if rate > 1.0 then
|
||
|
|
std.contract.blame_with_message "Sample rate must be <= 1.0" rate
|
||
|
|
else
|
||
|
|
rate,
|
||
|
|
}
|