moonrockz/diagrams/data-tree
Types
DataTree
pub struct DataTree {
id : String
root : String
nodes : ReadOnlyArray[Node]
highlights : ReadOnlyArray[Highlight]
title : String?
accessibility_title : String?
accessibility_description : String?
} derive(Eq, @moonbitlang/core/debug.Debug)One immutable structured-data diagram. It does not depend on JSON or YAML.
DataTree::equal
fn DataTree::equal(DataTree, DataTree) -> BoolDataTree::new
fn DataTree::new(id : String, root : String, nodes : ArrayView[Node], highlights? : ArrayView[Highlight], title? : String, accessibility_title? : String, accessibility_description? : String) -> DataTreeDataTree::not_equal
fn DataTree::not_equal(x : DataTree, y : DataTree) -> BoolDataTree::to_repr
fn DataTree::to_repr(DataTree) -> @moonbitlang/core/debug.ReprHighlight
pub struct Highlight {
targets : ReadOnlyArray[String]
style : String?
} derive(Eq, @moonbitlang/core/debug.Debug)A view highlight. Targets are member or node identities. The optional style is inert author metadata; library themes paint every highlight.
Highlight::equal
fn Highlight::equal(Highlight, Highlight) -> BoolHighlight::new
fn Highlight::new(targets : ArrayView[String], style? : String) -> HighlightHighlight::not_equal
fn Highlight::not_equal(x : Highlight, y : Highlight) -> BoolHighlight::to_repr
fn Highlight::to_repr(Highlight) -> @moonbitlang/core/debug.ReprIndex
pub struct Index {
tree : DataTree
order : ReadOnlyArray[String]
// private fields
}A validated data tree with constant-time lookups. Each node except the root has exactly one owning entry occurrence.
Index::build
fn Index::build(tree : DataTree, limits? : Limits) -> IndexResultValidate identities, containment, keys, numbers, highlights and limits without recursion. Scalar text is never interpreted as a reference.
Index::container
fn Index::container(self : Index, entry : String) -> String?The container node that holds a entry occurrence.
Index::depth
fn Index::depth(self : Index, node : String) -> Int?Index::find_member
fn Index::find_member(self : Index, id : String) -> Member?Index::node
fn Index::node(self : Index, id : String) -> Node?Index::owner
fn Index::owner(self : Index, node : String) -> Member?The entry occurrence that owns a node. The root has none.
IndexResult
pub struct IndexResult {
index : Index?
diagnostics : ReadOnlyArray[@moonrockz/diagrams.Diagnostic]
}Key
pub(all) enum Key {
Name(String)
Index(Int)
} derive(Eq, @moonbitlang/core/debug.Debug)The key of one member occurrence: an object member name or an array position.
Key::equal
fn Key::equal(Key, Key) -> BoolKey::not_equal
fn Key::not_equal(x : Key, y : Key) -> BoolKey::to_repr
fn Key::to_repr(Key) -> @moonbitlang/core/debug.ReprLimits
pub struct Limits {
nodes : Int
depth : Int
work : Int
} derive(Eq, @moonbitlang/core/debug.Debug)Explicit bounds for data-tree validation and indexing.
Limits::equal
fn Limits::equal(Limits, Limits) -> BoolLimits::new
fn Limits::new(nodes? : Int, depth? : Int, work? : Int) -> LimitsLimits::not_equal
fn Limits::not_equal(x : Limits, y : Limits) -> BoolLimits::to_repr
fn Limits::to_repr(Limits) -> @moonbitlang/core/debug.ReprMember
pub struct Member {
id : String
key : Key
value : String
source : @moonrockz/diagrams.Span?
} derive(Eq, @moonbitlang/core/debug.Debug)One member occurrence of a container. value names the child node.
Repeated names and equal values keep separate member identities.
Member::equal
fn Member::equal(Member, Member) -> BoolMember::index
fn Member::index(id : String, index : Int, value : String, source? : @moonrockz/diagrams.Span) -> MemberMember::named
fn Member::named(id : String, name : String, value : String, source? : @moonrockz/diagrams.Span) -> MemberMember::not_equal
fn Member::not_equal(x : Member, y : Member) -> BoolMember::to_repr
fn Member::to_repr(Member) -> @moonbitlang/core/debug.ReprNode
pub struct Node {
id : String
value : Value
source : @moonrockz/diagrams.Span?
} derive(Eq, @moonbitlang/core/debug.Debug)Node::array
fn Node::array(id : String, members : ArrayView[Member], source? : @moonrockz/diagrams.Span) -> NodeNode::equal
fn Node::equal(Node, Node) -> BoolNode::is_container
fn Node::is_container(self : Node) -> BoolNode::members
fn Node::members(self : Node) -> ReadOnlyArray[Member]The member occurrences of a container, or an empty array for a scalar.
Node::new
fn Node::new(id : String, value : Value, source? : @moonrockz/diagrams.Span) -> NodeNode::not_equal
fn Node::not_equal(x : Node, y : Node) -> BoolNode::object
fn Node::object(id : String, members : ArrayView[Member], source? : @moonrockz/diagrams.Span) -> NodeNode::to_repr
fn Node::to_repr(Node) -> @moonbitlang/core/debug.ReprValue
pub(all) enum Value {
Object(ReadOnlyArray[Member])
Array(ReadOnlyArray[Member])
Text(String)
Number(String)
Boolean(Bool)
Null
} derive(Eq, @moonbitlang/core/debug.Debug)A typed value. Numbers keep their exact decimal lexeme; no machine floating-point value is computed.
Value::equal
fn Value::equal(Value, Value) -> BoolValue::not_equal
fn Value::not_equal(x : Value, y : Value) -> BoolValue::scalar_text
fn Value::scalar_text(self : Value) -> String?The visible text of a scalar value, or None for a container.
Value::to_repr
fn Value::to_repr(Value) -> @moonbitlang/core/debug.ReprValues
diagnostic_codes
let diagnostic_codes : ReadOnlyArray[String]The stable diagnostic codes of data-tree validation.
valid_number
fn valid_number(lexeme : String) -> BoolTrue when lexeme is a valid JSON number spelling.
validate
fn validate(tree : DataTree, limits? : Limits) -> ReadOnlyArray[@moonrockz/diagrams.Diagnostic]Validate a constructed data tree. An empty result means the tree is valid.