Class: Solana::Ruby::Kit::Codecs::Codec
- Inherits:
-
Object
- Object
- Solana::Ruby::Kit::Codecs::Codec
- Extended by:
- T::Sig
- Defined in:
- lib/solana/ruby/kit/codecs/codec.rb
Overview
A Codec combines an Encoder and a Decoder for the same type. It also provides combinators that mirror @solana/codecs-core helpers:
fix_codec_size, add_codec_size_prefix, offset_codec, reverse_codec
Instance Attribute Summary collapse
-
#decoder ⇒ Object
readonly
Returns the value of attribute decoder.
-
#encoder ⇒ Object
readonly
Returns the value of attribute encoder.
Class Method Summary collapse
Instance Method Summary collapse
- #decode(bytes, offset: 0) ⇒ Object
- #encode(value) ⇒ Object
- #fixed_size ⇒ Object
-
#initialize(encoder, decoder) ⇒ Codec
constructor
A new instance of Codec.
- #transform_decoder(&map_fn) ⇒ Object
- #transform_encoder(&map_fn) ⇒ Object
Constructor Details
#initialize(encoder, decoder) ⇒ Codec
Returns a new instance of Codec.
20 21 22 23 |
# File 'lib/solana/ruby/kit/codecs/codec.rb', line 20 def initialize(encoder, decoder) @encoder = encoder @decoder = decoder end |
Instance Attribute Details
#decoder ⇒ Object (readonly)
Returns the value of attribute decoder.
17 18 19 |
# File 'lib/solana/ruby/kit/codecs/codec.rb', line 17 def decoder @decoder end |
#encoder ⇒ Object (readonly)
Returns the value of attribute encoder.
14 15 16 |
# File 'lib/solana/ruby/kit/codecs/codec.rb', line 14 def encoder @encoder end |
Class Method Details
.combine(encoder, decoder) ⇒ Object
27 28 29 |
# File 'lib/solana/ruby/kit/codecs/codec.rb', line 27 def self.combine(encoder, decoder) new(encoder, decoder) end |
Instance Method Details
#decode(bytes, offset: 0) ⇒ Object
36 |
# File 'lib/solana/ruby/kit/codecs/codec.rb', line 36 def decode(bytes, offset: 0) = @decoder.decode(bytes, offset: offset) |
#encode(value) ⇒ Object
33 |
# File 'lib/solana/ruby/kit/codecs/codec.rb', line 33 def encode(value) = @encoder.encode(value) |
#fixed_size ⇒ Object
39 |
# File 'lib/solana/ruby/kit/codecs/codec.rb', line 39 def fixed_size = @encoder.fixed_size |
#transform_decoder(&map_fn) ⇒ Object
55 56 57 58 59 60 61 62 |
# File 'lib/solana/ruby/kit/codecs/codec.rb', line 55 def transform_decoder(&map_fn) original_dec = @decoder new_dec = Decoder.new(fixed_size: original_dec.fixed_size) do |bytes, offset| value, consumed = original_dec.decode(bytes, offset: offset) [map_fn.call(value), consumed] end Codec.new(@encoder, new_dec) end |
#transform_encoder(&map_fn) ⇒ Object
44 45 46 47 48 49 50 |
# File 'lib/solana/ruby/kit/codecs/codec.rb', line 44 def transform_encoder(&map_fn) original_enc = @encoder new_enc = Encoder.new(fixed_size: original_enc.fixed_size, max_size: original_enc.max_size) do |value| original_enc.encode(map_fn.call(value)) end Codec.new(new_enc, @decoder) end |