2007-07-16 21:59:24 +00:00
|
|
|
Library
|
|
|
|
-------
|
2007-08-10 20:48:12 +00:00
|
|
|
The library abstract classes, exceptions, and general use functions
|
|
|
|
are mostly jammed in Thrift.ml (an exception being
|
|
|
|
TServer).
|
2007-07-16 21:59:24 +00:00
|
|
|
|
2007-08-10 20:48:12 +00:00
|
|
|
Generally, classes are used, however they are often put in their own
|
|
|
|
module along with other relevant types and functions. The classes
|
|
|
|
often called t, exceptions are called E.
|
|
|
|
|
|
|
|
Implementations live in their own files. There is TBinaryProtocol,
|
|
|
|
TSocket, TThreadedServer, TSimpleServer, and TServerSocket.
|
|
|
|
|
|
|
|
A note on making the library: Running make should create native, debug
|
|
|
|
code libraries, and a toplevel.
|
2007-07-16 21:59:24 +00:00
|
|
|
|
|
|
|
|
|
|
|
Struct format
|
|
|
|
-------------
|
2007-08-10 20:48:12 +00:00
|
|
|
Structs are turned into classes. The fields are all option types and
|
|
|
|
are initially None. Write is a method, but reading is done by a
|
|
|
|
separate function (since there is no such thing as a static
|
|
|
|
class). The class type is t and is in a module with the name of the
|
|
|
|
struct.
|
2007-07-16 21:59:24 +00:00
|
|
|
|
|
|
|
|
2007-08-10 20:48:12 +00:00
|
|
|
enum format
|
2007-07-16 21:59:24 +00:00
|
|
|
-----------
|
2007-08-10 20:48:12 +00:00
|
|
|
Enums are put in their own module along with
|
|
|
|
functions to_i and of_i which convert the ocaml types into ints. For
|
|
|
|
example:
|
2007-07-16 21:59:24 +00:00
|
|
|
|
|
|
|
enum Numberz
|
|
|
|
{
|
|
|
|
ONE = 1,
|
|
|
|
TWO,
|
|
|
|
THREE,
|
|
|
|
FIVE = 5,
|
|
|
|
SIX,
|
|
|
|
EIGHT = 8
|
|
|
|
}
|
|
|
|
|
|
|
|
==>
|
|
|
|
|
2007-08-10 20:48:12 +00:00
|
|
|
module Numberz =
|
2007-07-16 21:59:24 +00:00
|
|
|
struct
|
|
|
|
type t =
|
|
|
|
| ONE
|
|
|
|
| TWO
|
|
|
|
| THREE
|
|
|
|
| FIVE
|
|
|
|
| SIX
|
|
|
|
| EIGHT
|
|
|
|
|
|
|
|
let of_i = ...
|
|
|
|
let to_i = ...
|
|
|
|
end
|
|
|
|
|
|
|
|
typedef format
|
|
|
|
--------------
|
|
|
|
Typedef turns into the type declaration:
|
|
|
|
typedef i64 UserId
|
|
|
|
|
|
|
|
==>
|
|
|
|
|
|
|
|
type userid Int64.t
|
|
|
|
|
|
|
|
exception format
|
|
|
|
----------------
|
2007-08-10 20:48:12 +00:00
|
|
|
The same as structs except that the module also has an exception type
|
|
|
|
E of t that is raised/caught.
|
2007-07-16 21:59:24 +00:00
|
|
|
|
2007-08-10 20:48:12 +00:00
|
|
|
For example, with an exception Xception,
|
|
|
|
raise (Xception.E (new Xception.t))
|
|
|
|
and
|
|
|
|
try
|
|
|
|
...
|
|
|
|
with Xception.E e -> ...
|
2007-07-16 21:59:24 +00:00
|
|
|
|
|
|
|
list format
|
|
|
|
-----------
|
2007-08-10 20:48:12 +00:00
|
|
|
Lists are turned into OCaml native lists.
|
2007-07-16 21:59:24 +00:00
|
|
|
|
|
|
|
Map/Set formats
|
|
|
|
---------------
|
2007-08-10 20:48:12 +00:00
|
|
|
These are both turned into Hashtbl.t's. Set values are bool.
|
2007-07-16 21:59:24 +00:00
|
|
|
|
|
|
|
Services
|
|
|
|
--------
|
2007-08-10 20:48:12 +00:00
|
|
|
The client is a class "client" parametrized on input and output
|
|
|
|
protocols. The processor is a class parametrized on a handler. A
|
|
|
|
handler is a class inheriting the iface abstract class. Unlike other
|
|
|
|
implementations, client does not implement iface since iface functions
|
|
|
|
must take option arguments so as to deal with the case where a client
|
|
|
|
does not send all the arguments.
|