Module Chatoyant_runtime.JsonSource

Runtime-independent JSON representation.

This module is intentionally small and pure. Provider decoders should use it at their boundaries, while backend-specific modules can translate to and from native OCaml parsers or JavaScript values. Unknown provider fields should be preserved as JSON values when doing so helps forward compatibility.

Sourcetype t =
  1. | Null
  2. | Bool of bool
  3. | Float of float
  4. | String of string
  5. | Array of t list
  6. | Object of (string * t) list
Sourceval field : string -> t -> t option

Return a field from an object, or None when the value is not an object or the field is missing. Duplicate keys resolve to the first key encountered.

Sourceval as_string : t -> string option

Decode helpers for tolerant provider parsing.

Sourceval as_bool : t -> bool option
Sourceval as_float : t -> float option
Sourceval as_int : t -> int option
Sourceval as_list : t -> t list option
Sourceval as_object : t -> (string * t) list option
Sourceval to_string : t -> string

Encode a compact JSON string. This is used by tests and deterministic request-body fixtures; backend implementations may use native encoders for production IO.

Sourceval parse : string -> (t, string) result

Parse a JSON string. The parser is strict enough for provider responses and returns an error message instead of raising for malformed input.