trans-gen 0.4.0

Generating trans code from Rust into other languages
Documentation
import std.bitmanip;

abstract class Stream
{
    abstract ubyte[] readBytes(size_t byteCount);
    abstract void writeBytes(const ubyte[] data);
    abstract void flush();

    bool readBool()
    {
        return readBytes(1)[0] != 0;
    }

    int readInt()
    {
        return littleEndianToNative!(int)(readBytes(int.sizeof)[0 .. int.sizeof]);
    }

    long readLong()
    {
        return littleEndianToNative!(long)(readBytes(long.sizeof)[0 .. long.sizeof]);
    }

    float readFloat()
    {
        return littleEndianToNative!(float)(readBytes(float.sizeof)[0 .. float.sizeof]);
    }

    double readDouble()
    {
        return littleEndianToNative!(double)(readBytes(double.sizeof)[0 .. double.sizeof]);
    }

    string readString()
    {
        int length = readInt();
        ubyte[] data = readBytes(cast(size_t)(length));
        return cast(string)(data);
    }

    void write(bool value)
    {
        writeBytes(nativeToLittleEndian(value));
    }

    void write(int value)
    {
        writeBytes(nativeToLittleEndian(value));
    }

    void write(long value)
    {
        writeBytes(nativeToLittleEndian(value));
    }

    void write(float value)
    {
        writeBytes(nativeToLittleEndian(value));
    }

    void write(double value)
    {
        writeBytes(nativeToLittleEndian(value));
    }

    void write(string value)
    {
        ubyte[] data = cast(ubyte[])(value);
        write(cast(int) data.length);
        writeBytes(data);
    }
}