RlpEncoder
RLP Encoding according to the spec.
This also supports generating a Writer interface.
Supported types:
boolintenum,enum_literalerror_set,null?T[N]Tarray types.[]const Tslices.*Tpointer types.structs. Both tuple and non tuples.
All other types are currently not supported.
Depending on your use case you case use this in to ways.
Use encodeNoList if the type that you need to encode isn't a tuple, slice or array (doesn't apply for u8 slices and arrays.)
and use encodeList if you need to encode the above mentioned.
Only encodeList will allocate memory when using this interface.
Signature
pub fn RlpEncoder(comptime OutWriter: type) typeError
Set of errors that can be produced when encoding values.
OutWriter.Error || error{ Overflow, NegativeNumber }Writer
The writer interface that can rlp encode.
std.io.Writer(*Self, Error, encodeString)RlpSizeTag
Value that are used to identifity the size depending on the type
Properties
enum {
number = 0x80
string = 0xb7
list = 0xf7
}Init
Sets the initial state.
Signature
pub fn init(stream: OutWriter) SelfEncodeNoList
RLP Encoding according to the spec.
For non u8 slices and arrays use encodeList. Same applies for tuples and structs.
Signature
pub fn encodeNoList(self: *Self, payload: anytype) Error!voidEncodeList
RLP Encoding according to the spec. Only use this if you payload contains a slice, array or tuple/struct.
This will allocate memory because it creates a ArrayList writer for the recursive calls.
Signature
pub fn encodeList(self: *Self, allocator: Allocator, payload: anytype) Error!voidEncodeString
Performs RLP encoding on a "string" type.
For more information please check the spec.
Signature
pub fn encodeString(self: *Self, slice: []const u8) Error!voidWriteSize
Finds the bit size of the passed number and writes it to the stream.
Example:
const slice = "dog";
try rlp_encoder.writeSize(usize, slice.len, .number);
// Encodes as 0x80 + slice.len
try rlp_encoder.writeSize(usize, slice.len, .string);
// Encodes as 0xb7 + slice.len
try rlp_encoder.writeSize(usize, slice.len, .list);
// Encodes as 0xf7 + slice.lenSignature
pub fn writeSize(self: *Self, comptime T: type, number: T, tag: RlpSizeTag) Error!voidWriter
RLP encoding writer interface.
Signature
pub fn writer(self: *Self) WriterEncodeRlp
RLP Encoding according to the spec.
Supported types:
boolintenum,enum_literalerror_set,null?T[N]Tarray types.[]const Tslices.*Tpointer types.structs. Both tuple and non tuples.
All other types are currently not supported.
Exampleconst encoded = try encodeRlp(allocator, 69420);
defer allocator.free(encoded);Signature
pub fn encodeRlp(allocator: Allocator, payload: anytype) RlpEncoder(ArrayListWriter).Error![]u8EncodeRlpFromArrayListWriter
RLP Encoding according to the spec.
Supported types:
boolintenum,enum_literalerror_set,null?T[N]Tarray types.[]const Tslices.*Tpointer types.structs. Both tuple and non tuples.
All other types are currently not supported.
Examplevar list = std.ArrayList(u8).init(allocator);
errdefer list.deinit();
try encodeRlpFromArrayListWriter(allocator, 69420, list);
const encoded = try list.toOwnedSlice();Signature
pub fn encodeRlpFromArrayListWriter(allocator: Allocator, payload: anytype, list: ArrayListWriter) RlpEncoder(ArrayListWriter).Error!void