This directory contains go packages for all of the capnproto
schemas that ship with capnproto itself. They are generated with
the help of ./gen.sh
. Though some manual modifications have been made
to the schema to correct name collisions (See below).
./gen.sh
Usage
Executing:
./gen.sh import /path/to/schemas
Will copy all the *.capnp
files from the given directory into this
directory, and add annotations to them specifying package names and
import paths for capnpc-go
.
./gen.sh compile
Will generate go packages for each of the schemas in the current
directory.
./gen.sh clean-go
Will remove all generated go source files from this directory. Finally,
./gen.sh clean-all
Will remove both the go source files and the imported schemas.
gen.sh
does some name mangling to ensure that the generated packages
are actually legal go. However, this is not meant to be a
general-purpose solution; it is only intended to work for the base
schemas.
Under certain circumstances, capnpc-go
will sometimes generate illegal
go code. As an example, if two declarations Foo
and foo
exist in the
schema, capnpc-go
will capitalize the latter so that it will be
exported, which will cause a name collision.
To address this kind of issue, some of the schema have been manually
modified after importing, adding $Go.name
annotations which prevent
these errors.
Versions
The schemas checked in to this repository are those in capnproto commit
ad4079b (master at the time of writing). Unfortunately, the stable
release is very old, and some schemas out in the wild (notably
sandstorm) have started expecting more recent versions of the base
schemas.
Directory Structure
The directory structure of this repository is designed such that when
compiling other schema, it should be sufficient to execute:
capnp compile -I ${path_to_this_repository}/std -ogo ${schama_name}.capnp
And have the $import
statements in existing schema "just work."
To achieve this, the base schemas themselves are stored as
/std/capnp/${schema_name}.capnp
. The generated go source files are
stored in a subdirectory, to make them their own package:
/std/capnp/${mangled_schema_name}/${mangled_schema_name}.capnp.go
.
In addition to the upstream base schemas, we also ship a schema
/std/go.capnp
, which contains annotations used by go-capnpc
. Its
usage is described in the top-level README. The generated source is
placed in the root of the repository, making it part of the go package
zombiezen.com/go/capnproto2
.