Pudu programming language
Menu
Package

@chrismichaelps / pudu-lang-mcp

Model Context Protocol server for Pudu language documentation and compiler tools

0.1.1Apache-2.01

InstallClose

JsonAccess.pudu

Pudu64 lines1.8 KB

GitHub ↗
1/** @Utils.JsonAccess.Helper — typed member access over JSON values */2module PuduLangMcp.Utils.JsonAccess34import Std.Json as Json5import Std.Option as Option67/// A member of an object, or `None`.8export fn member(value: &Json.Json, name: Str) -> Option[Json.Json] {9  Json.field(value, name)10}1112/// A string member, or `None` when absent or of another kind.13export fn text(value: &Json.Json, name: Str) -> Option[Str] {14  let held = Json.field(value, name) ?15  Json.asText(&held)16}1718/// An integer member, or `None` when absent or of another kind.19export fn integer(value: &Json.Json, name: Str) -> Option[Int] {20  let held = Json.field(value, name) ?21  Json.asInt(&held)22}2324/// A boolean member, or `None` when absent or of another kind.25export fn boolean(value: &Json.Json, name: Str) -> Option[Bool] {26  let held = Json.field(value, name) ?27  Json.asBool(&held)28}2930/// An object's members in order; empty for any other value.31export fn members(value: &Json.Json) -> Array[(Str, Json.Json)] {32  Option.unwrapOr(Json.asObject(value), [])33}3435/// The JSON Schema type name of a value.36export fn kindOf(value: &Json.Json) -> Str {37  match value {38    case Json.Null => "null"39    case Json.Boolean(_) => "boolean"40    case Json.Number(_) => "integer"41    case Json.Fractional(_) => "number"42    case Json.Text(_) => "string"43    case Json.List(_) => "array"44    case Json.Object(_) => "object"45  }46}4748/// A JSON array of strings.49export fn texts(values: &Array[Str]) -> Json.Json {50  Json.list(&values.map(|value: Str| Json.Text(value)))51}5253/// The string at a path of member names, or `None`.54export fn pathText(value: &Json.Json, steps: &Array[Str]) -> Option[Str] {55  let held = Json.path(value, steps) ?56  Json.asText(&held)57}5859/// The integer at a path of member names, or `None`.60export fn pathInt(value: &Json.Json, steps: &Array[Str]) -> Option[Int] {61  let held = Json.path(value, steps) ?62  Json.asInt(&held)63}64