keys: Option<Array<string>>- Module
- std.
json - Receiver
- JSON
Value - Minimum arity
- 0
- Maximum arity
- 0
Declaration and parameters
LinkAvailability
Included by default: Pending
Import std.json in language mode 5.21.
The current compiler selects std/json.tpz for this language mode. Availability in other released editions and inclusion in each installed distribution are Pending.
Source evidence
- compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
b48527d0a174· 1198 - compiler/crates/topaz_resolve/src/stdlib.rs at
b48527d0a174· 68 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
b48527d0a174· 1198 - compiler/crates/topaz_self_frontend/topaz/checker/builtin_signatures.tpz at
b48527d0a174· 401 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
b48527d0a174· 1296 - compiler/crates/topaz_value/src/value/members.rs at
b48527d0a174· 206
Receiver
JSONValue
Parameter constraints
Bytes.length and ByteBuffer.length are read-only int properties that report the number of bytes.
JSONValue.length is an Option<int> property. Arrays and objects return Some(count) for their element or member count. Other JSON kinds return None().
JSONValue.keys and JSONValue.values are properties returning Option<Array<string>> and Option<Array<JSON. Objects return Some(keys) or Some(values). Other JSON kinds return None().
Read these properties without parentheses, as with Array.length, Map.length, Map.keys, Map.values, and Set.length. Calling a property value is rejected as a non-callable value.
Related rule: Read collection sizes, keys, and values as propertiesJSON is an immutable JSON tree with the six JSON kinds. Reading a member preserves the tree.
as and as return Some for the matching kind and None() for every other kind. False and empty text are present values. Neither function parses text or converts a number.
number returns the exact accepted number lexeme for a number and None() for another kind. It preserves a negative zero, exponent spelling and fractional trailing zeroes.
as returns Some for a number spelled as an optional minus and decimal integer digits within the signed 64 bit range. Negative zero becomes zero. A decimal point, exponent, overflow or different kind returns None() without rounding.
as returns the elements of an array in source order. Another kind returns None(). The returned array is a separate collection. Changing that collection does not change the JSON tree.
at uses a zero based array index. A negative index, an index at or beyond the array length, or a receiver of another kind returns None(). get uses an exact decoded object key and returns None() for an absent key or another receiver kind. A present null child is Some containing JSON null.
length is a property containing the array element count or object member count. Scalar kinds yield None(). keys and values are object properties. They contain arrays in ascending Unicode scalar order of decoded keys, with corresponding positions. Array and scalar receivers yield None() for both properties.
The receiver and supplied arguments are evaluated once in ordinary call order. Inspection performs no I/O and invokes no user conversion. Incorrect argument types follow ordinary checking diagnostics rather than becoming absent values.
Related rule: Project JSON values without coercionResult
The declared result type is Option<Array<string>>.
Effects
Failures
Result and effects
LinkSelect this field from a value of its named type without call parentheses.
Read object keys in Unicode scalar order through a property.
Why
LinkCollection observations use the same property syntax as Array, Map, and Set. Parentheses identify calls rather than stored or derived values.
Related entries
LinkRead collection sizes, keys, and values as properties
LinkRead collection sizes, keys, and values as properties
Bytes.length and ByteBuffer.length are read-only int properties that report the number of bytes.
JSONValue.length is an Option<int> property. Arrays and objects return Some(count) for their element or member count. Other JSON kinds return None().
JSONValue.keys and JSONValue.values are properties returning Option<Array<string>> and Option<Array<JSON. Objects return Some(keys) or Some(values). Other JSON kinds return None().
Read these properties without parentheses, as with Array.length, Map.length, Map.keys, Map.values, and Set.length. Calling a property value is rejected as a non-callable value.
Why
The same collection observation should use the same syntax across core collections and library values. Keeping JSONValue results optional preserves its distinction between collections and scalar values.
Source evidence
- compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 781 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 858 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 875 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 954 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 983 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 487 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 734 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 753 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 793 - compiler/crates/topaz_self_frontend/topaz/checker/call_complete.tpz at
271329b482bc· 1328 -
topaz.stdlib.contract.collection-propertiesatworking-tree - topaz.decision.collection-properties.1 at
topaz.decisi
Read the same properties on core collections
Linkimport std.iolet array = [2, 3]let entries = map { "name": "Topaz" }let values = set { 2, 3 }io.writeLine("{array.length}:{entries.length}:{values.length}")io.writeLine(entries.keys[0])io.writeLine(entries.values[0])
2:1:2 name Topaz
Expected result
Expected result
Execution completes. Exit code 0.
2:1:2nameTopaz
Source evidence
- compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 781 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 858 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 875 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 954 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 983 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 487 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 734 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 753 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 793 - compiler/crates/topaz_self_frontend/topaz/checker/call_complete.tpz at
271329b482bc· 1328 -
topaz.stdlib.contract.collection-propertiesatworking-tree - topaz.decision.collection-properties.1 at
topaz.decisi
Read a byte sequence size
Linkimport std.bytes { Bytes }import std.iolet bytes = Bytes.empty()let size: int = bytes.lengthio.writeLine("{size}")
0
Expected result
Expected result
Execution completes. Exit code 0.
0
Source evidence
- compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 781 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 858 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 875 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 954 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 983 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 487 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 734 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 753 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 793 - compiler/crates/topaz_self_frontend/topaz/checker/call_complete.tpz at
271329b482bc· 1328 -
topaz.stdlib.contract.collection-propertiesatworking-tree - topaz.decision.collection-properties.1 at
topaz.decisi
Read a byte buffer size
Linkimport std.bytes { ByteBuffer }import std.iolet buffer = ByteBuffer.allocate(3)let size: int = buffer.lengthio.writeLine("{size}")
3
Expected result
Expected result
Execution completes. Exit code 0.
3
Source evidence
- compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 781 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 858 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 875 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 954 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 983 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 487 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 734 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 753 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 793 - compiler/crates/topaz_self_frontend/topaz/checker/call_complete.tpz at
271329b482bc· 1328 -
topaz.stdlib.contract.collection-propertiesatworking-tree - topaz.decision.collection-properties.1 at
topaz.decisi
Read JSON sizes and preserve optional results
Linkimport std.jsonimport std.testimport std.iolet array = test.assertOk(json.parse("[1,2]"))let object = test.assertOk(json.parse("\{\"name\":\"Topaz\"\}"))let scalar = test.assertOk(json.parse("42"))let arraySize: Option<int> = array.lengthlet objectSize: Option<int> = object.lengthlet scalarSize: Option<int> = scalar.lengthtest.assertEq(test.assertSome(arraySize), 2)test.assertEq(test.assertSome(objectSize), 1)test.assertNone(scalarSize)io.writeLine("JSON sizes read")
JSON sizes read
Expected result
Expected result
Execution completes. Exit code 0.
JSON sizes read
Source evidence
- compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 781 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 858 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 875 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 954 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 983 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 487 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 734 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 753 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 793 - compiler/crates/topaz_self_frontend/topaz/checker/call_complete.tpz at
271329b482bc· 1328 -
topaz.stdlib.contract.collection-propertiesatworking-tree - topaz.decision.collection-properties.1 at
topaz.decisi
Read JSON object keys
Linkimport std.jsonimport std.testimport std.iolet object = test.assertOk(json.parse("\{\"name\":\"Topaz\"\}"))let array = test.assertOk(json.parse("[]"))let scalar = test.assertOk(json.parse("42"))let names: Option<Array<string>> = object.keystest.assertEq(test.assertSome(names)[0], "name")test.assertNone(array.keys)test.assertNone(scalar.keys)io.writeLine("JSON keys read")
JSON keys read
Expected result
Expected result
Execution completes. Exit code 0.
JSON keys read
Source evidence
- compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 781 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 858 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 875 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 954 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 983 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 487 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 734 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 753 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 793 - compiler/crates/topaz_self_frontend/topaz/checker/call_complete.tpz at
271329b482bc· 1328 -
topaz.stdlib.contract.collection-propertiesatworking-tree - topaz.decision.collection-properties.1 at
topaz.decisi
Read JSON object values
Linkimport std.jsonimport std.testimport std.iolet object = test.assertOk(json.parse("\{\"name\":\"Topaz\"\}"))let array = test.assertOk(json.parse("[]"))let scalar = test.assertOk(json.parse("42"))let values = test.assertSome(object.values)test.assertEq(test.assertSome(values[0].asString()), "Topaz")test.assertNone(array.values)test.assertNone(scalar.values)io.writeLine("JSON values read")
JSON values read
Expected result
Expected result
Execution completes. Exit code 0.
JSON values read
Source evidence
- compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 781 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 858 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 875 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 954 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 983 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 487 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 734 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 753 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 793 - compiler/crates/topaz_self_frontend/topaz/checker/call_complete.tpz at
271329b482bc· 1328 -
topaz.stdlib.contract.collection-propertiesatworking-tree - topaz.decision.collection-properties.1 at
topaz.decisi
Reject calling Bytes.length
Linkimport std.bytes { Bytes }function inspect(value: Bytes) -> () {let result = value.length()return ()}
No stdout.
Expected result
Expected result
Rejection during check. Nonzero exit.
TPZ5005stdlib-property-not-callable atmain.tpz:3:22
Source evidence
- compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 781 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 858 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 875 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 954 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 983 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 487 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 734 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 753 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 793 - compiler/crates/topaz_self_frontend/topaz/checker/call_complete.tpz at
271329b482bc· 1328 -
topaz.stdlib.contract.collection-propertiesatworking-tree - topaz.decision.collection-properties.1 at
topaz.decisi
Reject calling ByteBuffer.length
Linkimport std.bytes { ByteBuffer }function inspect(value: ByteBuffer) -> () {let result = value.length()return ()}
No stdout.
Expected result
Expected result
Rejection during check. Nonzero exit.
TPZ5005stdlib-property-not-callable atmain.tpz:3:22
Source evidence
- compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 781 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 858 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 875 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 954 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 983 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 487 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 734 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 753 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 793 - compiler/crates/topaz_self_frontend/topaz/checker/call_complete.tpz at
271329b482bc· 1328 -
topaz.stdlib.contract.collection-propertiesatworking-tree - topaz.decision.collection-properties.1 at
topaz.decisi
Reject calling JSONValue.length
Linkimport std.json { JSONValue }function inspect(value: JSONValue) -> () {let result = value.length()return ()}
No stdout.
Expected result
Expected result
Rejection during check. Nonzero exit.
TPZ5005stdlib-property-not-callable atmain.tpz:3:22
Source evidence
- compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 781 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 858 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 875 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 954 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 983 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 487 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 734 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 753 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 793 - compiler/crates/topaz_self_frontend/topaz/checker/call_complete.tpz at
271329b482bc· 1328 -
topaz.stdlib.contract.collection-propertiesatworking-tree - topaz.decision.collection-properties.1 at
topaz.decisi
Reject calling JSONValue.keys
Linkimport std.json { JSONValue }function inspect(value: JSONValue) -> () {let result = value.keys()return ()}
No stdout.
Expected result
Expected result
Rejection during check. Nonzero exit.
TPZ5005stdlib-property-not-callable atmain.tpz:3:22
Source evidence
- compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 781 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 858 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 875 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 954 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 983 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 487 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 734 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 753 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 793 - compiler/crates/topaz_self_frontend/topaz/checker/call_complete.tpz at
271329b482bc· 1328 -
topaz.stdlib.contract.collection-propertiesatworking-tree - topaz.decision.collection-properties.1 at
topaz.decisi
Reject calling JSONValue.values
Linkimport std.json { JSONValue }function inspect(value: JSONValue) -> () {let result = value.values()return ()}
No stdout.
Expected result
Expected result
Rejection during check. Nonzero exit.
TPZ5005stdlib-property-not-callable atmain.tpz:3:22
Source evidence
- compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 781 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 858 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 875 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 954 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
271329b482bc· 983 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 487 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 734 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 753 - compiler/crates/topaz_value/src/value/members.rs at
271329b482bc· 793 - compiler/crates/topaz_self_frontend/topaz/checker/call_complete.tpz at
271329b482bc· 1328 -
topaz.stdlib.contract.collection-propertiesatworking-tree - topaz.decision.collection-properties.1 at
topaz.decisi
Diagnostics
LinkProject JSON values without coercion
LinkProject JSON values without coercion
JSON is an immutable JSON tree with the six JSON kinds. Reading a member preserves the tree.
as and as return Some for the matching kind and None() for every other kind. False and empty text are present values. Neither function parses text or converts a number.
number returns the exact accepted number lexeme for a number and None() for another kind. It preserves a negative zero, exponent spelling and fractional trailing zeroes.
as returns Some for a number spelled as an optional minus and decimal integer digits within the signed 64 bit range. Negative zero becomes zero. A decimal point, exponent, overflow or different kind returns None() without rounding.
as returns the elements of an array in source order. Another kind returns None(). The returned array is a separate collection. Changing that collection does not change the JSON tree.
at uses a zero based array index. A negative index, an index at or beyond the array length, or a receiver of another kind returns None(). get uses an exact decoded object key and returns None() for an absent key or another receiver kind. A present null child is Some containing JSON null.
length is a property containing the array element count or object member count. Scalar kinds yield None(). keys and values are object properties. They contain arrays in ascending Unicode scalar order of decoded keys, with corresponding positions. Array and scalar receivers yield None() for both properties.
The receiver and supplied arguments are evaluated once in ordinary call order. Inspection performs no I/O and invokes no user conversion. Incorrect argument types follow ordinary checking diagnostics rather than becoming absent values.
Why
Optional projection keeps a missing child distinct from a stored null. Number text preserves the original representation, while the integer projection has an explicit spelling and range. Sorted key and value positions support deterministic traversal.
Source evidence
- compiler/crates/topaz_value/src/value/json/parser.rs at
912a5e86e1f9· 20 - compiler/crates/topaz_value/src/value/members.rs at
912a5e86e1f9· 659 -
topaz.stdlib.contract.json-valueatworking-tree - topaz.decision.json-number-projection.1 at
topaz.decisi
Inspect present values and missing children
Linkimport std.jsonimport std.testimport std.iolet value = test.assertOk(json.parse("[false,\"\",null,7]"))let items = test.assertSome(value.asArray())test.assertEq(test.assertSome(items[0].asBool()), false)test.assertEq(test.assertSome(items[1].asString()), "")test.assertEq(items[2].kind(), "null")test.assertEq(test.assertSome(items[3].asInt()), 7)test.assertNone(value.at(-1))test.assertNone(value.at(4))test.assertNone(value.get("0"))test.assertNone(items[0].asString())test.assertNone(items[1].numberText())test.assertNone(items[2].asArray())let object = test.assertOk(json.parse("\{\"present\":null\}"))test.assertEq(test.assertSome(object.get("present")).kind(), "null")test.assertNone(object.get("missing"))test.assertNone(object.at(0))io.writeLine("present values remain distinct from missing children")
present values remain distinct from missing children
Expected result
Expected result
Execution completes. Exit code 0.
present values remain distinct from missing children
Source evidence
- compiler/crates/topaz_value/src/value/json/parser.rs at
912a5e86e1f9· 20 - compiler/crates/topaz_value/src/value/members.rs at
912a5e86e1f9· 659 -
topaz.stdlib.contract.json-valueatworking-tree - topaz.decision.json-number-projection.1 at
topaz.decisi
Keep integer projection within the declared spelling and range
Linkimport std.jsonimport std.testimport std.iofor text in (["-9223372036854775808", "9223372036854775807", "9223372036854775808", "-0", "1.0", "1e0", "1.5"]) {let value = test.assertOk(json.parse(text))match (value.asInt()) {case Some(number) => io.writeLine("{text} = {number}")case None() => io.writeLine("{text} = none")}}
-9223372036854775808 = -9223372036854775808 9223372036854775807 = 9223372036854775807 9223372036854775808 = none -0 = 0 1.0 = none 1e0 = none 1.5 = none
Expected result
Expected result
Execution completes. Exit code 0.
-9223372036854775808 = -92233720368547758089223372036854775807 = 92233720368547758079223372036854775808 = none-0 = 01.0 = none1e0 = none1.5 = none
Source evidence
- compiler/crates/topaz_value/src/value/json/parser.rs at
912a5e86e1f9· 20 - compiler/crates/topaz_value/src/value/members.rs at
912a5e86e1f9· 659 -
topaz.stdlib.contract.json-valueatworking-tree - topaz.decision.json-number-projection.1 at
topaz.decisi
Read matching keys and values in scalar order
Linkimport std.jsonimport std.testimport std.iolet object = test.assertOk(json.parse("\{\"z\":1,\"a\":null\}"))let names = test.assertSome(object.keys)let values = test.assertSome(object.values)test.assertEq(test.assertSome(object.length), 2)io.writeLine("{names[0]} = {values[0].kind()}")io.writeLine("{names[1]} = {test.assertSome(values[1].asInt())}")let array = test.assertOk(json.parse("[]"))test.assertEq(test.assertSome(array.length), 0)test.assertNone(array.keys)test.assertNone(array.values)let scalar = test.assertOk(json.parse("\"text\""))test.assertNone(scalar.length)
a = null z = 1
Expected result
Expected result
Execution completes. Exit code 0.
a = nullz = 1
Source evidence
- compiler/crates/topaz_value/src/value/json/parser.rs at
912a5e86e1f9· 20 - compiler/crates/topaz_value/src/value/members.rs at
912a5e86e1f9· 659 -
topaz.stdlib.contract.json-valueatworking-tree - topaz.decision.json-number-projection.1 at
topaz.decisi