|  | Library | 
|  | ------- | 
|  | The library abstract classes, exceptions, and general use functions | 
|  | are mostly jammed in Thrift.ml (an exception being | 
|  | TServer). | 
|  |  | 
|  | 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. | 
|  |  | 
|  |  | 
|  | Struct format | 
|  | ------------- | 
|  | 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. | 
|  |  | 
|  |  | 
|  | enum format | 
|  | ----------- | 
|  | Enums are put in their own module along with | 
|  | functions to_i and of_i which convert the ocaml types into ints. For | 
|  | example: | 
|  |  | 
|  | enum Numberz | 
|  | { | 
|  | ONE = 1, | 
|  | TWO, | 
|  | THREE, | 
|  | FIVE = 5, | 
|  | SIX, | 
|  | EIGHT = 8 | 
|  | } | 
|  |  | 
|  | ==> | 
|  |  | 
|  | module Numberz = | 
|  | 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 | 
|  | ---------------- | 
|  | The same as structs except that the module also has an exception type | 
|  | E of t that is raised/caught. | 
|  |  | 
|  | For example, with an exception Xception, | 
|  | raise (Xception.E (new Xception.t)) | 
|  | and | 
|  | try | 
|  | ... | 
|  | with Xception.E e -> ... | 
|  |  | 
|  | list format | 
|  | ----------- | 
|  | Lists are turned into OCaml native lists. | 
|  |  | 
|  | Map/Set formats | 
|  | --------------- | 
|  | These are both turned into Hashtbl.t's. Set values are bool. | 
|  |  | 
|  | Services | 
|  | -------- | 
|  | 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. |