Module: Solana::Ruby::Kit::Codecs
- Extended by:
- Bytes, DataStructures, Numbers, Strings, T::Sig
- Defined in:
- lib/solana/ruby/kit/codecs/bytes.rb,
lib/solana/ruby/kit/codecs/codec.rb,
lib/solana/ruby/kit/codecs/decoder.rb,
lib/solana/ruby/kit/codecs/encoder.rb,
lib/solana/ruby/kit/codecs/numbers.rb,
lib/solana/ruby/kit/codecs/strings.rb,
lib/solana/ruby/kit/codecs/data_structures.rb,
lib/solana/ruby/kit/codecs.rb
Defined Under Namespace
Modules: Bytes, DataStructures, Numbers, Strings Classes: Codec, Decoder, Encoder
Class Method Summary collapse
- .add_codec_size_prefix(codec, prefix_codec) ⇒ Object
- .fix_codec_size(codec, size) ⇒ Object
- .offset_codec(codec, pre_offset: 0, post_offset: 0) ⇒ Object
- .reverse_codec(codec) ⇒ Object
Methods included from Numbers
compact_u16_codec, f32_codec, f64_codec, i128_codec, i16_codec, i32_codec, i64_codec, i8_codec, u128_codec, u16_codec, u32_codec, u64_codec, u8_codec
Methods included from Strings
base58_codec, base64_codec, bit_array_codec, bytes_codec, hex_codec, utf8_codec
Methods included from DataStructures
array_codec, map_codec, option_codec, set_codec, struct_codec, tuple_codec, union_codec
Methods included from Bytes
contains_bytes?, fix_bytes, merge_bytes, pad_bytes
Class Method Details
.add_codec_size_prefix(codec, prefix_codec) ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/solana/ruby/kit/codecs/codec.rb', line 92 def add_codec_size_prefix(codec, prefix_codec) enc = Encoder.new do |value| data = codec.encode(value) prefix = prefix_codec.encode(data.bytesize) prefix + data end dec = Decoder.new do |bytes, offset| len, prefix_size = prefix_codec.decode(bytes, offset: offset) value, data_size = codec.decode(bytes, offset: offset + prefix_size) [value, prefix_size + data_size] end Codec.new(enc, dec) end |
.fix_codec_size(codec, size) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/solana/ruby/kit/codecs/codec.rb', line 72 def fix_codec_size(codec, size) enc = Encoder.new(fixed_size: size) do |value| raw = codec.encode(value) if raw.bytesize < size raw.b + ("\x00".b * (size - raw.bytesize)) else raw.b[0, size] || ''.b end end dec = Decoder.new(fixed_size: size) do |bytes, offset| slice = bytes.b.byteslice(offset, size) || ''.b value, = codec.decoder.decode(slice, offset: 0) [value, size] end Codec.new(enc, dec) end |
.offset_codec(codec, pre_offset: 0, post_offset: 0) ⇒ Object
111 112 113 114 115 116 117 118 |
# File 'lib/solana/ruby/kit/codecs/codec.rb', line 111 def offset_codec(codec, pre_offset: 0, post_offset: 0) enc = Encoder.new(fixed_size: codec.fixed_size) { |v| codec.encode(v) } dec = Decoder.new(fixed_size: codec.fixed_size) do |bytes, offset| value, consumed = codec.decode(bytes, offset: offset + pre_offset) [value, consumed + post_offset] end Codec.new(enc, dec) end |
.reverse_codec(codec) ⇒ Object
122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/solana/ruby/kit/codecs/codec.rb', line 122 def reverse_codec(codec) enc = Encoder.new(fixed_size: codec.fixed_size) do |value| codec.encode(value).b.reverse end dec = Decoder.new(fixed_size: codec.fixed_size) do |bytes, offset| size = codec.fixed_size || bytes.bytesize - offset slice = bytes.b.byteslice(offset, size) || ''.b value, = codec.decode(slice.reverse, offset: 0) [value, size] end Codec.new(enc, dec) end |