Module Qcert.Compiler.Lib.QData
Require
Import
CompilerRuntime
.
Require
String
.
Require
Data
.
Require
JSON
.
Require
DataToEJson
.
Require
EJsonToJSON
.
Require
Import
String
.
Module
QData
(
runtime
:
CompilerRuntime
).
Definition
json
:
Set
:=
JSON.json
.
Definition
qdata
:
Set
:=
Data.data
.
Definition
t
:
Set
:=
qdata
.
Definition
jnull
:
json
:=
JSON.jnull
.
Definition
jnumber
z
:
json
:=
JSON.jnumber
z
.
Definition
jbool
b
:
json
:=
JSON.jbool
b
.
Definition
jstring
s
:
json
:=
JSON.jstring
s
.
Definition
jarray
jl
:
json
:=
JSON.jarray
jl
.
Definition
jobject
jl
:
json
:=
JSON.jobject
jl
.
Definition
dunit
:
qdata
:=
Data.dunit
.
Definition
dnat
z
:
qdata
:=
Data.dnat
z
.
Definition
dfloat
n
:
qdata
:=
Data.dfloat
n
.
Definition
dbool
b
:
qdata
:=
Data.dbool
b
.
Definition
dstring
s
:
qdata
:=
Data.dstring
s
.
Definition
dcoll
dl
:
qdata
:=
Data.dcoll
dl
.
Definition
drec
dl
:
qdata
:=
Data.drec
dl
.
Definition
dleft
:
qdata
->
qdata
:=
Data.dleft
.
Definition
dright
:
qdata
->
qdata
:=
Data.dright
.
Definition
dbrand
b
:
qdata
->
qdata
:=
Data.dbrand
b
.
JSON -> data conversion
Definition
json_to_qdata
br
(
j
:
JSON.json
) :
qdata
:=
DataNorm.normalize_data
br
(
DataToEJson.ejson_to_data
(
EJsonToJSON.json_to_ejson
j
)).
data -> JSON *string* conversion
Definition
qdataStringify
s
:
qdata
->
String.string
:= (
fun
d
=>
JSON.jsonStringify
s
(
EJsonToJSON.ejson_to_json
(
DataToEJson.data_to_ejson
d
))).
Definition
jsonStringify
s
:
JSON.json
->
String.string
:=
JSON.jsonStringify
s
.
Definition
data_to_string
:
qdata
->
String.string
:=
qdataStringify
EmitUtil.quotel_double
.
Definition
ejson_to_string
:
EJson.ejson
->
String.string
:= (
fun
j
=>
EJson.ejsonStringify
EmitUtil.quotel_double
j
).
Definition
cejson_to_string
:
EJson.cejson
->
String.string
:= (
fun
j
=>
EJson.cejsonStringify
EmitUtil.quotel_double
j
).
Definition
json_to_string
:
JSON.json
->
String.string
:=
jsonStringify
EmitUtil.quotel_double
.
Section
dist
.
Import
DData
.
Definition
qddata
:
Set
:=
DData.ddata
.
Definition
dlocal
:
qdata
->
qddata
:=
DData.Dlocal
.
Definition
ddistr
(
x
:
qdata
) :
option
qddata
:=
match
x
with
|
Data.dcoll
c
=>
Some
(
DData.Ddistr
c
)
|
_
=>
None
end
.
End
dist
.
End
QData
.