DoxigAlpha

encode

Function parameters

Parameters

#
writer:anytype

Type definitions in this namespace

Types

#
Element
A decoded view.
ExpectedTag
For decoding.
Any
Use sparingly.

Functions in this namespace

Functions

#

Source

Implementation

#
pub fn encode(self: Tag, writer: anytype) @TypeOf(writer).Error!void {
    var tag1 = FirstTag{
        .number = undefined,
        .constructed = self.constructed,
        .class = self.class,
    };

    var buffer: [3]u8 = undefined;
    var stream = std.io.fixedBufferStream(&buffer);
    var writer2 = stream.writer();

    switch (@intFromEnum(self.number)) {
        0...std.math.maxInt(u5) => |n| {
            tag1.number = @intCast(n);
            writer2.writeByte(@bitCast(tag1)) catch unreachable;
        },
        std.math.maxInt(u5) + 1...std.math.maxInt(u7) => |n| {
            tag1.number = 15;
            const tag2 = NextTag{ .number = @intCast(n), .continues = false };
            writer2.writeByte(@bitCast(tag1)) catch unreachable;
            writer2.writeByte(@bitCast(tag2)) catch unreachable;
        },
        else => |n| {
            tag1.number = 15;
            const tag2 = NextTag{ .number = @intCast(n >> 7), .continues = true };
            const tag3 = NextTag{ .number = @truncate(n), .continues = false };
            writer2.writeByte(@bitCast(tag1)) catch unreachable;
            writer2.writeByte(@bitCast(tag2)) catch unreachable;
            writer2.writeByte(@bitCast(tag3)) catch unreachable;
        },
    }

    _ = try writer.write(stream.getWritten());
}