Add typed Kotlin JSON object reader
ober
451037e0ec6e13b31301b26b339e5a6b88693beb
--- a/lib/jerboa/typed/checker.ss +++ b/lib/jerboa/typed/checker.ss @@ -545,6 +545,9 @@ (cons 'json-object-opt-json-array (make-typed-call-sig (list 'JSONObject 'String) (list 'Nullable 'JSONArray) '() 'jvm-json-object-opt-json-array '())) + (cons 'json-object-opt-json-object + (make-typed-call-sig (list 'JSONObject 'String) (list 'Nullable 'JSONObject) '() + 'jvm-json-object-opt-json-object '())) (cons 'system-current-time-millis-string (make-typed-call-sig '() 'String '() 'jvm-system-current-time-millis-string '())) --- a/lib/jerboa/typed/core.ss +++ b/lib/jerboa/typed/core.ss @@ -160,6 +160,7 @@ jvm-json-object-opt-float32 jvm-json-object-opt-int32-default jvm-json-object-opt-json-array + jvm-json-object-opt-json-object jvm-string-substring-before jvm-system-current-time-millis-string record-ctor --- a/lib/jerboa/typed/kotlin/lower.ss +++ b/lib/jerboa/typed/kotlin/lower.ss @@ -484,6 +484,8 @@ (make-kt-member-call (car args) 'optInt (cdr args))] [(jvm-json-object-opt-json-array) (make-kt-member-call (car args) 'optJSONArray (cdr args))] + [(jvm-json-object-opt-json-object) + (make-kt-member-call (car args) 'optJSONObject (cdr args))] [(jvm-boolean-array-ref) (make-kt-index-get (car args) (cadr args))] [(jvm-boolean-array-set) --- a/tests/test-typed-checker.ss +++ b/tests/test-typed-checker.ss @@ -1003,10 +1003,20 @@ (type JSONObject) (type JSONArray) (type Int32) - (def (read-values (json : JSONObject) (items : JSONArray)) : (Pair JSONObject (Nullable JSONArray)) + (def (read-values (json : JSONObject) (items : JSONArray)) : (Pair JSONObject (Nullable JSONObject)) (pair (json-array-get-json-object items (json-object-opt-int32-default json "index" (int32 0))) - (json-object-opt-json-array json "items"))))) + (json-object-opt-json-object json "meta"))))) + '()) + +(test "json-object optional array reader accepts JSON arrays" + (error-kinds + '(typed-library (body json-object-optional-array-reader) + (export read-items) + (type JSONObject) + (type JSONArray) + (def (read-items (json : JSONObject)) : (Nullable JSONArray) + (json-object-opt-json-array json "items")))) '()) (test "json-array optional readers accept JSON arrays" --- a/tests/test-typed-kotlin.ss +++ b/tests/test-typed-kotlin.ss @@ -728,7 +728,7 @@ (define json-object-form '(typed-library (sample typed json-object) - (export makeCell readX readCount readItems readName readNameDefault) + (export makeCell readX readCount readItems readMeta readName readNameDefault) (type JSONObject) (type JSONArray) (type Float32) @@ -751,6 +751,8 @@ (json-object-opt-int32-default json "count" (int32 1))) (def (readItems (json : JSONObject)) : (Nullable JSONArray) (json-object-opt-json-array json "items")) + (def (readMeta (json : JSONObject)) : (Nullable JSONObject) + (json-object-opt-json-object json "meta")) (def (readName (json : JSONObject)) : String (json-object-opt-string json "name")) (def (readNameDefault (json : JSONObject)) : String @@ -785,6 +787,9 @@ (test-contains "JSONObject opt JSONArray lowers to nullable optJSONArray" json-object-kotlin "json.optJSONArray(\"items\")") +(test-contains "JSONObject opt JSONObject lowers to nullable optJSONObject" + json-object-kotlin + "json.optJSONObject(\"meta\")") (test-contains "JSONObject opt String lowers to optString" json-object-kotlin "json.optString(\"name\")")