module Data:sig
..end
This module is responsible for marshaling and demarshaling data to handle communications between the server and the client in both directions.
Each datatype must be equipped with functions to encode and decode values to/from JSON format. Moreover, data types shall be also properly documented and registered in the generated documentation of the Frama-C server.
Generally speaking, we will have a module with signature Data.D
for every
datatype to be exchanged with the server. For simple values, predefined
modules are already provided. More complex datatypes can be built with some
functors, typically for options, lists or arrays.
Records and enumerated types are typical in JSON formatting, but difficult to build from OCaml records and abstract datatypes. For those kinds of data, we provide an API based on the following general scheme:
Data.S
for values, there is also a
polymorphic type 'a Data.data
for module values carrying a data module with
type t = 'a
.
The same mechanism is used throughout modules States
and Request
each
time a JSON record or tag is needed.
typejson =
Json.t
val page : Server.Doc.page
val pretty : Format.formatter -> json -> unit
module type S =sig
..end
module type Info =sig
..end
type'a
data =(module Server.Data.S with type t = 'a)
module type S_collection =sig
..end
module Collection:
module Junit:S
with type t = unit
module Jany:S
with type t = json
module Jbool:S_collection
with type t = bool
module Jint:S_collection
with type t = int
module Jfloat:S_collection
with type t = float
module Jstring:S_collection
with type t = string
module Jident:S_collection
with type t = string
module Jtext:S
with type t = json
Jbuffer
.
module Jmarkdown:S
with type t = Markdown.text
module Joption:
module Jpair:
module Jtriple:
module Jlist:
module Jarray:
module Record:sig
..end
module Tag:S_collection
with type t = Syntax.tag
module Enum:sig
..end
These datatypes automatically index complex values with unique identifiers. This avoids to encode the internal OCaml representation of each value, by only providing to the server a unique identifier for each value.
These datatype functors come into three flavors:
Index()
for projectified datatypes,Static()
for project independant datatypes,Identified()
for projectified values already identified by integers.module type Map =sig
..end
Map.S
.
module type Index =sig
..end
module Static:
module Index:
module type IdentifiedType =sig
..end
module Identified:
These utilities shall be used when writing your own encoding and decoding
values to JSON format.
exception InputError of string
val failure : ?json:json ->
('a, Format.formatter, unit, 'b) Pervasives.format4 -> 'a
InputError
with provided message.val failure_from_type_error : string -> json -> 'a
InputError
from Yojson.Basic.Util.Type_error
arguments.