Standard validation result format and utilities.
This namespace defines the canonical result format for all validation operations in the Boundary framework, supporting both schema validation and business rule validation with structured errors and warnings.
Result Format: {:valid? boolean ; Overall validation status :data map ; Validated/transformed data (if valid) :errors vector-of-error-maps ; Validation errors (if invalid) :warnings vector-of-warning-maps} ; Non-blocking warnings (optional)
Error/Warning Map Format: {:field keyword ; Field identifier :code keyword ; Error/warning code :message string ; Human-readable message :params map ; Template parameters :path vector ; Path to error location :rule-id keyword} ; Optional: validation rule ID
Design Principles:
Standard validation result format and utilities.
This namespace defines the canonical result format for all validation
operations in the Boundary framework, supporting both schema validation
and business rule validation with structured errors and warnings.
Result Format:
{:valid? boolean ; Overall validation status
:data map ; Validated/transformed data (if valid)
:errors vector-of-error-maps ; Validation errors (if invalid)
:warnings vector-of-warning-maps} ; Non-blocking warnings (optional)
Error/Warning Map Format:
{:field keyword ; Field identifier
:code keyword ; Error/warning code
:message string ; Human-readable message
:params map ; Template parameters
:path vector ; Path to error location
:rule-id keyword} ; Optional: validation rule ID
Design Principles:
- Forward compatibility: new keys can be added without breaking existing code
- Feature-flag gated: new functionality controlled by BND_DEVEX_VALIDATION
- I18n-ready: :code + :params enable future message translation
- FC/IS compliant: pure data structures, no side effects(add-error result error)Add an error to existing result.
Args: result: Existing validation result error: Error map to add
Returns: Updated result with error added and :valid? set to false
Add an error to existing result. Args: result: Existing validation result error: Error map to add Returns: Updated result with error added and :valid? set to false
(add-warning result warning)Add a warning to existing result.
Args: result: Existing validation result warning: Warning map to add
Returns: Updated result with warning added
Add a warning to existing result. Args: result: Existing validation result warning: Warning map to add Returns: Updated result with warning added
(devex-validation-enabled?)Check if DevEx validation features are enabled.
Delegates to the feature-flags system for consistent flag resolution. Default: false (backward compatible).
Returns: Boolean indicating if DevEx validation is enabled
Check if DevEx validation features are enabled. Delegates to the feature-flags system for consistent flag resolution. Default: false (backward compatible). Returns: Boolean indicating if DevEx validation is enabled
(error-count result)Count total errors in result.
Args: result: Validation result map
Returns: Integer error count
Count total errors in result. Args: result: Validation result map Returns: Integer error count
(error-map field code message)(error-map field code message {:keys [params path rule-id] :as _opts})Create a structured error map.
Args: field: Keyword identifying the field code: Keyword error code message: Human-readable error message opts: (optional) Map with :params, :path, :rule-id
Returns: Structured error map
Example: (error-map :email :invalid-format "Invalid email format" {:params {:value "bad@email"} :path [:user :email]})
Create a structured error map.
Args:
field: Keyword identifying the field
code: Keyword error code
message: Human-readable error message
opts: (optional) Map with :params, :path, :rule-id
Returns:
Structured error map
Example:
(error-map :email :invalid-format "Invalid email format"
{:params {:value "bad@email"} :path [:user :email]})(errors-by-code result)Group errors by code.
Args: result: Validation result map
Returns: Map of {code [error-maps]}
Group errors by code.
Args:
result: Validation result map
Returns:
Map of {code [error-maps]}(errors-by-field result)Group errors by field.
Args: result: Validation result map
Returns: Map of {field [error-maps]}
Example: {:email [{:field :email :code :invalid-format ...}] :age [{:field :age :code :out-of-range ...}]}
Group errors by field.
Args:
result: Validation result map
Returns:
Map of {field [error-maps]}
Example:
{:email [{:field :email :code :invalid-format ...}]
:age [{:field :age :code :out-of-range ...}]}(failure-result errors)(failure-result errors warnings)Create a failed validation result.
Args: errors: Vector of error maps or single error map warnings: (optional) Vector of warning maps
Returns: Standard failure result map
Example: (failure-result {:field :email, :code :invalid-format, :message "Invalid email"}) => {:valid? false, :data nil, :errors [{...}], :warnings []}
Create a failed validation result.
Args:
errors: Vector of error maps or single error map
warnings: (optional) Vector of warning maps
Returns:
Standard failure result map
Example:
(failure-result {:field :email, :code :invalid-format, :message "Invalid email"})
=> {:valid? false, :data nil, :errors [{...}], :warnings []}(first-error result)Get first error from result.
Args: result: Validation result map
Returns: First error map or nil
Get first error from result. Args: result: Validation result map Returns: First error map or nil
(get-errors result)Extract errors from validation result.
Args: result: Validation result map
Returns: Vector of error maps (empty if validation passed)
Extract errors from validation result. Args: result: Validation result map Returns: Vector of error maps (empty if validation passed)
(get-validated-data result)Extract validated data from result.
Args: result: Validation result map
Returns: Validated data or nil if validation failed
Extract validated data from result. Args: result: Validation result map Returns: Validated data or nil if validation failed
(get-warnings result)Extract warnings from validation result.
Args: result: Validation result map
Returns: Vector of warning maps
Extract warnings from validation result. Args: result: Validation result map Returns: Vector of warning maps
(has-warnings? result)Check if result has warnings.
Args: result: Validation result map
Returns: Boolean indicating presence of warnings
Check if result has warnings. Args: result: Validation result map Returns: Boolean indicating presence of warnings
(legacy-result? result)Check if result uses legacy format (no :warnings key).
Args: result: Validation result map
Returns: Boolean indicating legacy format
Check if result uses legacy format (no :warnings key). Args: result: Validation result map Returns: Boolean indicating legacy format
(merge-results results)Merge multiple validation results.
Combined result is valid only if all inputs are valid. Errors and warnings are concatenated.
Args: results: Vector of validation result maps
Returns: Merged validation result
Example: (merge-results [result1 result2 result3])
Merge multiple validation results. Combined result is valid only if all inputs are valid. Errors and warnings are concatenated. Args: results: Vector of validation result maps Returns: Merged validation result Example: (merge-results [result1 result2 result3])
(normalize-result result)Normalize legacy result to standard format.
Ensures result has all expected keys (:valid?, :data, :errors, :warnings).
Args: result: Validation result map (legacy or standard)
Returns: Normalized result map
Normalize legacy result to standard format. Ensures result has all expected keys (:valid?, :data, :errors, :warnings). Args: result: Validation result map (legacy or standard) Returns: Normalized result map
(success-result data)(success-result data warnings)Create a successful validation result.
Args: data: Validated/transformed data warnings: (optional) Vector of warning maps
Returns: Standard success result map
Example: (success-result {:email "user@example.com" :name "John"}) => {:valid? true, :data {...}, :errors [], :warnings []}
Create a successful validation result.
Args:
data: Validated/transformed data
warnings: (optional) Vector of warning maps
Returns:
Standard success result map
Example:
(success-result {:email "user@example.com" :name "John"})
=> {:valid? true, :data {...}, :errors [], :warnings []}(validation-failed? result)Check if validation result indicates failure.
Args: result: Validation result map
Returns: Boolean indicating if validation failed
Check if validation result indicates failure. Args: result: Validation result map Returns: Boolean indicating if validation failed
(validation-passed? result)Check if validation result indicates success.
Args: result: Validation result map
Returns: Boolean indicating if validation passed
Check if validation result indicates success. Args: result: Validation result map Returns: Boolean indicating if validation passed
(warning-map field code message)(warning-map field code message opts)Create a structured warning map (same structure as error-map).
Args: field: Keyword identifying the field code: Keyword warning code message: Human-readable warning message opts: (optional) Map with :params, :path, :rule-id
Returns: Structured warning map
Create a structured warning map (same structure as error-map). Args: field: Keyword identifying the field code: Keyword warning code message: Human-readable warning message opts: (optional) Map with :params, :path, :rule-id Returns: Structured warning map
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |