2 Thrift IDL Support.
Support for Thrift format definitions
> (require thrift thrift/idl/language) > (define-thrift-namespace parquet)
> (define-thrift-enum parquet-type 0 (boolean int32 int64 int96 float double byte-array fixed-len-byte-arrary))
> (define-thrift-struct file-metadata ([1 version required type-int32] [2 schema required list-of schema-element] [3 num-rows required type-int64] [4 row-groups required list-of row-group] [5 key-value-metadata optional list-of key-value] [6 created-by optional type-string] [7 column-orders optional list-of column-order]))
2.1 Type System
(require thrift/idl/common) | package: thrift |
2.1.1 Core Types
procedure
v : any/c
value
value
value
value
value
value
value
value
value
value
value
value
value
value
value
value
value
value
procedure
(integer->type n) → type?
n : exact-nonnegative-integer?
procedure
(type/decode d) → type?
d : decoder?
procedure
(type/names) → (listof string?)
2.1.2 Field Type Information
procedure
(required-type? v) → boolean?
v : any/c
value
value
value
procedure
n : exact-nonnegative-integer?
procedure
d : decoder?
procedure
(required-type/names) → (listof string?)
procedure
(container-type? v) → boolean?
v : any/c
value
value
value
value
procedure
n : exact-nonnegative-integer?
procedure
d : decoder?
procedure
struct
(struct thrift-field ( id name required container major-type minor-type position) #:mutable) id : identifier? name : string? required : symbol? container : symbol? major-type : symbol? minor-type : symbol? position : exact-nonnegative-integer?
2.2 IDL Language
(require thrift/idl/language) | package: thrift |
syntax
namespace : string?
syntax
id = string? maybe-start =
| exact-nonnegative-integer? value-expr = identifier? | [identifier? exact-nonnegative-integer?]
syntax
field = (index name maybe-req maybe-con elem-type) | (index name maybe-req map-of elem-type key-type) maybe-required =
| required-type? maybe-container =
| container-type?
index : exact-nonnegative-integer?
name : identifier?
elem-type : identifier?
key-type : identifier?
2.3 Code Generator
(require thrift/idl/generator) | package: thrift |
procedure
(process-file [ file-path module-prefix over-write?]) → void? file-path : string? = "." module-prefix : string? = "" over-write? : boolean? = #f
2.3.1 Command-Line Launcher
The parquet/idl/generator module is also used to create a launcher, rthrift that wraps process-file to generate bindings for an IDL file from a Racket description.
rthrift [ <option> ... ] <file-path> |
where <option> is one of |
-v, --verbose : Compile with verbose messages |
-V, --very-verbose : Compile with very verbose messages |
-o <path>, --output-path <path> : Directory to write the output into |
-m <module>, --module-prefix <module> : Prefix generated modules with a module path |
-f, --force-overwrite : Over-write any existing files |
--help, -h : Show this help |
-- : Do not treat any remaining argument as a switch (at this level) |
Multiple single-letter switches can be combined after one `-'; for |
example: `-h-' is the same as `-h --' |
To generate the files used in the module parquet, we use the following command.
$ rthrift -o parquet/generated -m parquet/generated parquet/format.rkt
This generates the following files, in the parquet/generated directory.
parquet.rkt - The core types, expanded, used by the following.
parquet-encode.rkt - All the encoder functions for the types above.
parquet-decode.rkt - All the decoder functions for the types above.
parquet.scrbl - Documentation for the three modules above.