A Thrift encoding code generator and library for Go.
go get -u go.uber.org/thriftrw
If using Glide, at least glide version 0.12
is required to install:
$ glide --version
glide version 0.12.2
$ glide get 'go.uber.org/thriftrw#^1'
Ready for most users. No breaking changes will be made within the same major release.
To install dependencies and build the project run:
make build
To run the entire test suite, run:
make test
A lot of the codebase has its logic exercised via integration tests residing in gen/internal/tests
.
In other words, since ThriftRW is a code generation library, the way to test that code generation behavior is
implemented correctly is to create a real Thrift struct definition, run code generation, and assert that the output is correct.
Step by step, this process is:
gen/internal/tests/thrift
. For example, in gen/internal/tests/thrift/structs.thrift
, you can find
struct GoTags
that is used to exercise go.tag generation behavior, or struct NotOmitEmpty
that is used to exercise behavior
when a field is tagged with !omitempty
make generate
. This will generate the go struct from your definition, and place it in gen/internal/tests/structs/structs.go
*_test.go
files that is pertinent to the feature you are adding. Oftentimes, these tests
take in the generated go structs as inputs, and assert on various aspects of code generation like struct tags or json marshaling/unmarshaling behavior.gen/quick_test.go
so that your new struct and all of its generic methods (e.g., ToWire, FromWire, String, Equals, etc.)
can be exercised for code coverageNote: Code coverage is measured across packages, rather than per package. This is because go test
is run with the -coverpkg=./...
flag,
which tells the code coverage tool to measure coverage for this package and all packages in the subdirectories.