elixir-thrift/TODO.md
Preston Guillory 819216f830 Pure elixir implementation (#54)
A pure Elixir implementation of the Thrift binary protocol.

This PR includes serialization and deserialization for all thrift types as well as testing to make sure we match the thrift spec (which can be found here: https://erikvanoosten.github.io/thrift-missing-specification/#_binary_encoding)

The binary protocol is generated alongside the thrift data types, yielding a much faster implementation than the apache project's canonical one. 

Our benchmarks (using benchfella) indicate a speedup of between 10 and 20x.

## Binary Protocol Performance
benchmark name |  iterations | average time 
------------------|-----------|---------------
elixir serialization (left as IOList)                   |  2000  | 849.01 µs/op
elixir serialization (iolist_size)                        |  2000  | 933.83 µs/op
elixir serialization (converted to binary)        | 1000   | 1281.23 µs/op
elixir deserialization                                       |  1000   | 1178.46 µs/op
erlang serialization left as IOList                    |   100   | 10284.84 µs/op
erlang serialization (converted to binary)      |   100   | 11588.89 µs/op
erlang deserialization                                      |   100   | 21433.17 µs/op
2016-11-30 11:31:59 -08:00

927 B

Stuff left TODO:

  • Riffed Parity

  • Typedef resolution support

    • Typedefs can't be resolved across files
  • Better Testing Story For Model Generation

    • Presently Model Generation Tests The output, it should test behavior
  • Enum Improvements

    • Should have a way to convert from name to ordinal
    • Should be able to match on ordinals as well as values
  • Model Improvements

    • Support for Unions
    • Typespecs for generated models
    • Correct handing of default values
    • Create new function for models that does type checking of fields
  • Binary Protocol

    • Binary protocol decoder
    • Improve benchmark tests
    • Add Message handing for encoding
    • Add Function call serialization
  • Framed Client

  • Framed Server

  • Beyond Riffed

  • Finagle Client

  • Finagle Server

  • Thrift MUX Client

  • Thrift MUX Server