static void appendImplDecoderTrait(
        final String schemaVersionType,
        final Appendable out,
        final String typeName) throws IOException
    {
        indent(out, 1, "impl %s for %s {\n", "ActingVersion", withAnonymousLifetime(typeName));
        indent(out, 2, "#[inline]\n");
        indent(out, 2, "fn acting_version(&self) -> %s {\n", schemaVersionType);
        indent(out, 3, "self.acting_version\n");
        indent(out, 2, "}\n");
        indent(out, 1, "}\n\n");

        indent(out, 1, "impl<%s> %s for %s {\n", BUF_LIFETIME, withBufLifetime("Reader"), withBufLifetime(typeName));
        indent(out, 2, "#[inline]\n");
        indent(out, 2, "fn get_buf(&self) -> &ReadBuf<'a> {\n");
        indent(out, 3, "&self.buf\n");
        indent(out, 2, "}\n");
        indent(out, 1, "}\n\n");

        indent(out, 1, "impl<%s> %s for %s {\n", BUF_LIFETIME, withBufLifetime("Decoder"), withBufLifetime(typeName));
        indent(out, 2, "#[inline]\n");
        indent(out, 2, "fn get_limit(&self) -> usize {\n");
        indent(out, 3, "self.limit\n");
        indent(out, 2, "}\n\n");

        indent(out, 2, "#[inline]\n");
        indent(out, 2, "fn set_limit(&mut self, limit: usize) {\n");
        indent(out, 3, "self.limit = limit;\n");
        indent(out, 2, "}\n");
        indent(out, 1, "}\n\n");
    }
Create a new Rust language {@link CodeGenerator}.

@param ir            for the messages and types.
@param crateVersion  for the generated crate.
@param outputManager for generating the codecs to.
sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/RustGenerator.java