diff --git a/src/honk.gleam b/src/honk.gleam index 67c66f8..9a265da 100644 --- a/src/honk.gleam +++ b/src/honk.gleam @@ -1,12 +1,12 @@ // Main public API for the ATProtocol lexicon validator -import honk/errors as errors import gleam/dict.{type Dict} import gleam/json.{type Json} import gleam/option.{None, Some} import gleam/result +import honk/errors import honk/internal/json_helpers -import honk/types as types +import honk/types import honk/validation/context import honk/validation/formats diff --git a/src/honk/internal/constraints.gleam b/src/honk/internal/constraints.gleam index 889284e..6d3b717 100644 --- a/src/honk/internal/constraints.gleam +++ b/src/honk/internal/constraints.gleam @@ -1,11 +1,11 @@ // Reusable constraint validation functions -import honk/errors as errors import gleam/int import gleam/list import gleam/option.{type Option, Some} import gleam/result import gleam/string +import honk/errors /// Validates length constraints (minLength/maxLength) pub fn validate_length_constraints( diff --git a/src/honk/internal/json_helpers.gleam b/src/honk/internal/json_helpers.gleam index 32d2a59..e027a7c 100644 --- a/src/honk/internal/json_helpers.gleam +++ b/src/honk/internal/json_helpers.gleam @@ -1,6 +1,5 @@ // JSON helper utilities for extracting and validating fields -import honk/errors.{type ValidationError, data_validation, invalid_schema} import gleam/dict.{type Dict} import gleam/dynamic.{type Dynamic} import gleam/dynamic/decode @@ -8,6 +7,7 @@ import gleam/json.{type Json} import gleam/list import gleam/option.{type Option, None, Some} import gleam/result +import honk/errors.{type ValidationError, data_validation, invalid_schema} /// Parse JSON string to dynamic for decoding fn json_to_dynamic(json_value: Json) -> Result(Dynamic, String) { @@ -293,9 +293,7 @@ pub fn dynamic_to_json(dyn: Dynamic) -> Result(Json, ValidationError) { } } Error(_) -> - Error(data_validation( - "Failed to convert dynamic to Json", - )) + Error(data_validation("Failed to convert dynamic to Json")) } } } diff --git a/src/honk/internal/resolution.gleam b/src/honk/internal/resolution.gleam index 9d5b3b0..94e9946 100644 --- a/src/honk/internal/resolution.gleam +++ b/src/honk/internal/resolution.gleam @@ -1,6 +1,5 @@ // Reference resolution utilities -import honk/errors as errors import gleam/dict.{type Dict} import gleam/json.{type Json} import gleam/list @@ -8,6 +7,7 @@ import gleam/option.{type Option, None, Some} import gleam/result import gleam/set.{type Set} import gleam/string +import honk/errors import honk/internal/json_helpers import honk/validation/context.{type ValidationContext} diff --git a/src/honk/validation/context.gleam b/src/honk/validation/context.gleam index d61f1cf..2298e29 100644 --- a/src/honk/validation/context.gleam +++ b/src/honk/validation/context.gleam @@ -1,6 +1,5 @@ // Validation context and builder -import honk/errors as errors import gleam/dict.{type Dict} import gleam/json.{type Json} import gleam/list @@ -8,8 +7,9 @@ import gleam/option.{type Option, None, Some} import gleam/result import gleam/set.{type Set} import gleam/string +import honk/errors import honk/internal/json_helpers -import honk/types as types +import honk/types import honk/validation/formats /// Validation context that tracks state during validation @@ -36,8 +36,7 @@ pub type ValidationContextBuilder { lexicons: Dict(String, types.LexiconDoc), // Parameters: data (Json), schema (Json), ctx (ValidationContext) validator: Option( - fn(Json, Json, ValidationContext) -> - Result(Nil, errors.ValidationError), + fn(Json, Json, ValidationContext) -> Result(Nil, errors.ValidationError), ), ) } diff --git a/src/honk/validation/field.gleam b/src/honk/validation/field.gleam index 5cf2ee6..1323cce 100644 --- a/src/honk/validation/field.gleam +++ b/src/honk/validation/field.gleam @@ -1,6 +1,5 @@ // Field type validators (object and array) -import honk/errors as errors import gleam/dict import gleam/dynamic.{type Dynamic} import gleam/dynamic/decode @@ -9,6 +8,7 @@ import gleam/json.{type Json} import gleam/list import gleam/option.{None, Some} import gleam/result +import honk/errors import honk/internal/constraints import honk/internal/json_helpers import honk/validation/context.{type ValidationContext} diff --git a/src/honk/validation/field/reference.gleam b/src/honk/validation/field/reference.gleam index bd6de9b..610da09 100644 --- a/src/honk/validation/field/reference.gleam +++ b/src/honk/validation/field/reference.gleam @@ -1,10 +1,10 @@ // Reference type validator -import honk/errors as errors import gleam/json.{type Json} import gleam/option.{None, Some} import gleam/result import gleam/string +import honk/errors import honk/internal/constraints import honk/internal/json_helpers import honk/internal/resolution diff --git a/src/honk/validation/field/union.gleam b/src/honk/validation/field/union.gleam index 1c2fd68..624d6ce 100644 --- a/src/honk/validation/field/union.gleam +++ b/src/honk/validation/field/union.gleam @@ -1,12 +1,12 @@ // Union type validator -import honk/errors as errors import gleam/dynamic/decode import gleam/json.{type Json} import gleam/list import gleam/option.{None, Some} import gleam/result import gleam/string +import honk/errors import honk/internal/constraints import honk/internal/json_helpers import honk/validation/context.{type ValidationContext} diff --git a/src/honk/validation/formats.gleam b/src/honk/validation/formats.gleam index e4ef7d7..798412e 100644 --- a/src/honk/validation/formats.gleam +++ b/src/honk/validation/formats.gleam @@ -4,7 +4,7 @@ import gleam/list import gleam/regexp import gleam/string import gleam/time/timestamp -import honk/types as types +import honk/types /// Validates RFC3339 datetime format pub fn is_valid_rfc3339_datetime(value: String) -> Bool { diff --git a/src/honk/validation/meta/token.gleam b/src/honk/validation/meta/token.gleam index c24a47d..16a2c2a 100644 --- a/src/honk/validation/meta/token.gleam +++ b/src/honk/validation/meta/token.gleam @@ -1,9 +1,9 @@ // Token type validator // Tokens are unit types used for discrimination in unions -import honk/errors as errors import gleam/json.{type Json} import gleam/string +import honk/errors import honk/internal/constraints import honk/internal/json_helpers import honk/validation/context.{type ValidationContext} diff --git a/src/honk/validation/meta/unknown.gleam b/src/honk/validation/meta/unknown.gleam index 81a5bf7..2024439 100644 --- a/src/honk/validation/meta/unknown.gleam +++ b/src/honk/validation/meta/unknown.gleam @@ -1,9 +1,9 @@ // Unknown type validator // Unknown allows flexible data with AT Protocol data model rules -import honk/errors as errors import gleam/json.{type Json} import gleam/option.{None, Some} +import honk/errors import honk/internal/constraints import honk/internal/json_helpers import honk/validation/context.{type ValidationContext} diff --git a/src/honk/validation/primary/params.gleam b/src/honk/validation/primary/params.gleam index 88429e0..06634ab 100644 --- a/src/honk/validation/primary/params.gleam +++ b/src/honk/validation/primary/params.gleam @@ -2,12 +2,12 @@ // Mirrors the Go implementation's validation/primary/params // Params define query/procedure/subscription parameters (XRPC endpoint arguments) -import honk/errors as errors import gleam/dynamic/decode import gleam/json.{type Json} import gleam/list import gleam/option.{None, Some} import gleam/result +import honk/errors import honk/internal/constraints import honk/internal/json_helpers import honk/validation/context.{type ValidationContext} diff --git a/src/honk/validation/primary/procedure.gleam b/src/honk/validation/primary/procedure.gleam index ba1ff7d..719d989 100644 --- a/src/honk/validation/primary/procedure.gleam +++ b/src/honk/validation/primary/procedure.gleam @@ -1,10 +1,10 @@ // Procedure type validator // Procedures are XRPC Procedure (HTTP POST) endpoints for modifying data -import honk/errors as errors import gleam/json.{type Json} import gleam/option.{None, Some} import gleam/result +import honk/errors import honk/internal/constraints import honk/internal/json_helpers import honk/validation/context.{type ValidationContext} diff --git a/src/honk/validation/primary/query.gleam b/src/honk/validation/primary/query.gleam index 8a5c56d..9f66f1c 100644 --- a/src/honk/validation/primary/query.gleam +++ b/src/honk/validation/primary/query.gleam @@ -1,12 +1,12 @@ // Query type validator // Queries are XRPC Query (HTTP GET) endpoints for retrieving data -import honk/errors as errors import gleam/dynamic/decode import gleam/json.{type Json} import gleam/list import gleam/option.{None, Some} import gleam/result +import honk/errors import honk/internal/constraints import honk/internal/json_helpers import honk/validation/context.{type ValidationContext} diff --git a/src/honk/validation/primary/record.gleam b/src/honk/validation/primary/record.gleam index 62d1dfc..de2a865 100644 --- a/src/honk/validation/primary/record.gleam +++ b/src/honk/validation/primary/record.gleam @@ -1,10 +1,10 @@ // Record type validator -import honk/errors as errors import gleam/json.{type Json} import gleam/option.{None, Some} import gleam/result import gleam/string +import honk/errors import honk/internal/constraints import honk/internal/json_helpers import honk/validation/context.{type ValidationContext} @@ -101,7 +101,10 @@ pub fn validate_data( /// - `any`: Record key can be any valid record key format /// - `nsid`: Record key must be a valid NSID /// - `literal:*`: Record key must match the literal value after the colon -fn validate_key(def_name: String, key: String) -> Result(Nil, errors.ValidationError) { +fn validate_key( + def_name: String, + key: String, +) -> Result(Nil, errors.ValidationError) { case key { "tid" -> Ok(Nil) "any" -> Ok(Nil) diff --git a/src/honk/validation/primary/subscription.gleam b/src/honk/validation/primary/subscription.gleam index bcd0862..fa87ed9 100644 --- a/src/honk/validation/primary/subscription.gleam +++ b/src/honk/validation/primary/subscription.gleam @@ -1,12 +1,12 @@ // Subscription type validator // Subscriptions are XRPC Subscription (WebSocket) endpoints for real-time data -import honk/errors as errors import gleam/dynamic/decode import gleam/json.{type Json} import gleam/list import gleam/option.{None, Some} import gleam/result +import honk/errors import honk/internal/constraints import honk/internal/json_helpers import honk/validation/context.{type ValidationContext} diff --git a/src/honk/validation/primitive/blob.gleam b/src/honk/validation/primitive/blob.gleam index ee6ebc1..60e0aa3 100644 --- a/src/honk/validation/primitive/blob.gleam +++ b/src/honk/validation/primitive/blob.gleam @@ -1,7 +1,6 @@ // Blob type validator // Blobs are binary objects with MIME types and size constraints -import honk/errors as errors import gleam/dynamic.{type Dynamic} import gleam/dynamic/decode import gleam/int @@ -10,6 +9,7 @@ import gleam/list import gleam/option.{None, Some} import gleam/result import gleam/string +import honk/errors import honk/internal/constraints import honk/internal/json_helpers import honk/validation/context.{type ValidationContext} diff --git a/src/honk/validation/primitive/boolean.gleam b/src/honk/validation/primitive/boolean.gleam index a2a1a04..8669741 100644 --- a/src/honk/validation/primitive/boolean.gleam +++ b/src/honk/validation/primitive/boolean.gleam @@ -1,9 +1,9 @@ // Boolean type validator -import honk/errors as errors import gleam/json.{type Json} import gleam/option.{None, Some} import gleam/result +import honk/errors import honk/internal/constraints import honk/internal/json_helpers import honk/validation/context.{type ValidationContext} diff --git a/src/honk/validation/primitive/bytes.gleam b/src/honk/validation/primitive/bytes.gleam index 057cc92..b404154 100644 --- a/src/honk/validation/primitive/bytes.gleam +++ b/src/honk/validation/primitive/bytes.gleam @@ -1,13 +1,13 @@ // Bytes type validator // Bytes are base64-encoded strings -import honk/errors as errors import gleam/bit_array import gleam/json.{type Json} import gleam/list import gleam/option.{None, Some} import gleam/result import gleam/string +import honk/errors import honk/internal/constraints import honk/internal/json_helpers import honk/validation/context.{type ValidationContext} diff --git a/src/honk/validation/primitive/cid_link.gleam b/src/honk/validation/primitive/cid_link.gleam index b1118f2..a1ec364 100644 --- a/src/honk/validation/primitive/cid_link.gleam +++ b/src/honk/validation/primitive/cid_link.gleam @@ -1,9 +1,9 @@ // CID Link type validator // CID links are IPFS content identifiers -import honk/errors as errors import gleam/json.{type Json} import gleam/option +import honk/errors import honk/internal/constraints import honk/internal/json_helpers import honk/validation/context.{type ValidationContext} diff --git a/src/honk/validation/primitive/integer.gleam b/src/honk/validation/primitive/integer.gleam index 4b30de0..79ebcfe 100644 --- a/src/honk/validation/primitive/integer.gleam +++ b/src/honk/validation/primitive/integer.gleam @@ -1,12 +1,12 @@ // Integer type validator -import honk/errors as errors import gleam/dynamic/decode import gleam/int import gleam/json.{type Json} import gleam/list import gleam/option.{None, Some} import gleam/result +import honk/errors import honk/internal/constraints import honk/internal/json_helpers import honk/validation/context.{type ValidationContext} diff --git a/src/honk/validation/primitive/null.gleam b/src/honk/validation/primitive/null.gleam index 816eca7..a6ea453 100644 --- a/src/honk/validation/primitive/null.gleam +++ b/src/honk/validation/primitive/null.gleam @@ -1,7 +1,7 @@ // Null type validator -import honk/errors as errors import gleam/json.{type Json} +import honk/errors import honk/internal/constraints import honk/internal/json_helpers import honk/validation/context.{type ValidationContext} diff --git a/src/honk/validation/primitive/string.gleam b/src/honk/validation/primitive/string.gleam index 8f883da..1127341 100644 --- a/src/honk/validation/primitive/string.gleam +++ b/src/honk/validation/primitive/string.gleam @@ -1,15 +1,15 @@ // String type validator -import honk/errors as errors import gleam/dynamic/decode import gleam/json.{type Json} import gleam/list import gleam/option.{type Option, None, Some} import gleam/result import gleam/string +import honk/errors import honk/internal/constraints import honk/internal/json_helpers -import honk/types as types +import honk/types import honk/validation/context.{type ValidationContext} import honk/validation/formats