f0bd73160b
This has a nicer and more explicit default value syntax. |
||
---|---|---|
ext | ||
lib | ||
src | ||
test | ||
.gitignore | ||
.gitmodules | ||
.travis.yml | ||
coveralls.json | ||
LICENSE | ||
Makefile | ||
mix.exs | ||
mix.lock | ||
README.md |
Thrift Utilities for Elixir
This package contains a handful of useful utilities for working with Thrift in Elixir.
In particular, it includes a copy of the Erlang Thrift runtime library.
Setup
Start by adding this package to your project as a dependency:
{:thrift, github: "pinterest/elixir-thrift", submodules: true}
Mix
This package includes a Mix compiler task that can be used to automate Thrift
code generation. Start by adding :thrift
to your project's :compilers
list.
For example:
compilers: [:thrift | Mix.compilers]
It's important to add :thrift
before the :erlang
entry. The Thrift
compiler will generate Erlang source files, and we currently rely on this
ordering to ensure those generated source files get compiled.
Next, define the list of :thrift_files
that should be compiled. In this
example, we gather all of the .thrift
files under the thrift
directory:
thrift_files: Mix.Utils.extract_files(["thrift"], [:thrift])
By default, the generated source files will be written to the src
directory,
but you can change that using the thrift_output
option.
You can also pass additional options to the Thrift compiler by listing them in
the thrift_options
option:
thrift_options: ~w[-I my/include/dir]
If you require a specific version of the Thrift compiler, you can specify a
version requirement using the thrift_version
option. Version requirements
use the SemVer 2.0 schema. For example:
thrift_version: ">= 0.9.3" # Erlang maps support
You can also override the name of the Thrift compiler executable itself:
thrift_executable: "thrift-0.9.3"
If you get something like type set() undefined
when compiling the generated files
you can try:
thrift_options: ~w[--gen erl:maps]
Thrift IDL Parsing
This package also contains experimental support for parsing Thrift IDL files. For the moment, only an Erlang lexer is available, but the goal is to provide more advanced parser support over time.
:thrift_lexer.string('enum Colors { RED, GREEN, BLUE}')
{:ok,
[{:enum, 1}, {:ident, 1, 'Colors'}, {:symbol, 1, '{'}, {:ident, 1, 'RED'},
{:symbol, 1, ','}, {:ident, 1, 'GREEN'}, {:symbol, 1, ','},
{:ident, 1, 'BLUE'}, {:symbol, 1, '}'}], 1}