aec78ba97d
This appears to be case-sensitive, and I wasn't noticing because the macOS's file system isn't. Also, remove the Apache License batch from the README because it doesn't render that well as part of the generated documentation. We may want to remove the other badges later too if we continue to use the README as a key part of our Hex-published docs. |
||
---|---|---|
bench | ||
ci | ||
config | ||
lib | ||
src | ||
test | ||
.credo.exs | ||
.ebert.yml | ||
.gitignore | ||
.travis.yml | ||
coveralls.json | ||
LICENSE | ||
mix.exs | ||
mix.lock | ||
README.md | ||
TODO.md |
Thrift Utilities for Elixir
This package contains a handful of useful utilities for working with Thrift in Elixir.
Setup
Start by adding this package to your project as a dependency:
{:thrift, "~> 1.3"}
Or to track the GitHub master branch:
{:thrift, github: "pinterest/elixir-thrift"}
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. It is built on a low-level Erlang lexer and parser:
{:ok, tokens, _} = :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}
{:ok, schema} = :thrift_parser.parse(tokens)
{:ok,
%Thrift.Parser.Models.Schema{constants: %{},
enums: %{Colors: %Thrift.Parser.Models.TEnum{name: :Colors,
values: [RED: 1, GREEN: 2, BLUE: 3]}}, exceptions: %{}, includes: [],
namespaces: %{}, services: %{}, structs: %{}, thrift_namespace: nil,
typedefs: %{}, unions: %{}}}
But also provides a high-level Elixir parsing interface:
Thrift.Parser.parse("enum Colors { RED, GREEN, BLUE}")
%Thrift.Parser.Models.Schema{constants: %{},
enums: %{Colors: %Thrift.Parser.Models.TEnum{name: :Colors,
values: [RED: 1, GREEN: 2, BLUE: 3]}}, exceptions: %{}, includes: [],
namespaces: %{}, services: %{}, structs: %{}, thrift_namespace: nil,
typedefs: %{}, unions: %{}}