README.md
# Xdrgen
[![Build Status](https://travis-ci.org/stellar/xdrgen.svg)](https://travis-ci.org/stellar/xdrgen)
[![Code Climate](https://codeclimate.com/github/stellar/xdrgen/badges/gpa.svg)](https://codeclimate.com/github/stellar/xdrgen)
`xdrgen` is a code generator that takes XDR IDL files (`.x` files) as specified
in [RFC 4506](http://tools.ietf.org/html/rfc4506.html) and spits code out in
various languages.
`xdrgen` requires ruby 2.1 or later to run.
## Status
Xdrgen is a very early project. Aside from the test fixtures in
[spec/fixtures](spec/fixtures), the only .x files that have been thrown at it
are the .x files used for the
[stellar-core project](https://github.com/stellar/stellar-core).
Xdrgen presently supports these output languages: ruby, javacript, java,
golang, elixir and Python:
- ruby: complete support
- javascript: complete support
- java: complete support
- golang: currently using a fork of go-xdr, but has complete support
- rust: support is experimental. Default arms and floats are not supported.
- elixir: support is experimental as the SDK is in early development. Generated
code requires [:exdr](https://github.com/revelrylabs/exdr) in your deps
- C#: complete support
- Python: complete support
Testing is _very_ sparse, but will improve over time.
## Usage as a binary
Xdrgen is a rubygem, compatible with ruby 2.1 or higher
$ gem install xdrgen
The command line:
`xdrgen [-o OUTPUT_DIR] [-l LANGUAGE] [-n NAMESPACE] [INPUT_FILES ...]`
### Language Specific Options
### Rust
`--rust-types-custom-str-impl`: Used to specify a comma-separated list of type names that should not have string conversion code generated as it will be provided by custom implementations provided by the developer using the generated code.
## Usage as a library
Add this line to your application's Gemfile:
```ruby
gem 'xdrgen'
```
And then execute:
$ bundle
Example usage:
```ruby
require 'xdrgen'
# create a compilation object, specifying your options
c = Xdrgen::Compilation.new(
["MyProgram.x"],
output_dir:"src/generated",
language: :ruby,
namespace: "MyProgram::XDR",
options: {
rust_types_custom_str_impl: [],
rust_types_custom_jsonschema_impl: [],
},
)
# then run compile
c.compile
```
## Contributing
1. Fork it ( https://github.com/[my-github-username]/xdrgen/fork )
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request