Module: MTProto::Type::Serializer
- Defined in:
- lib/mtproto/type/serializer.rb
Class Method Summary collapse
- .integer_to_bytes(int) ⇒ Object
- .padding(current_length) ⇒ Object
- .serialize_bytes(bytes) ⇒ Object
- .serialize_int(value) ⇒ Object
- .serialize_int128(value) ⇒ Object
- .serialize_int256(value) ⇒ Object
- .serialize_long(value) ⇒ Object
- .serialize_string(str) ⇒ Object
Class Method Details
.integer_to_bytes(int) ⇒ Object
43 44 45 46 47 48 49 50 51 52 |
# File 'lib/mtproto/type/serializer.rb', line 43 def integer_to_bytes(int) return "\x00" if int.zero? bytes = [] while int > 0 bytes.unshift(int & 0xff) int >>= 8 end bytes.pack('C*') end |
.padding(current_length) ⇒ Object
38 39 40 41 |
# File 'lib/mtproto/type/serializer.rb', line 38 def padding(current_length) pad_length = (4 - (current_length % 4)) % 4 ("\x00" * pad_length).b end |
.serialize_bytes(bytes) ⇒ Object
24 25 26 27 28 29 30 31 32 |
# File 'lib/mtproto/type/serializer.rb', line 24 def serialize_bytes(bytes) length = bytes.bytesize if length <= 253 [length].pack('C').b + bytes.b + padding(length + 1) else [254].pack('C').b + [length].pack('L<')[0, 3].b + bytes.b + padding(length + 4) end end |
.serialize_int(value) ⇒ Object
8 9 10 |
# File 'lib/mtproto/type/serializer.rb', line 8 def serialize_int(value) [value].pack('L<') end |
.serialize_int128(value) ⇒ Object
16 17 18 |
# File 'lib/mtproto/type/serializer.rb', line 16 def serialize_int128(value) value.is_a?(String) ? value : [value].pack('Q<Q<') end |
.serialize_int256(value) ⇒ Object
20 21 22 |
# File 'lib/mtproto/type/serializer.rb', line 20 def serialize_int256(value) value.is_a?(String) ? value : [value].pack('Q<Q<Q<Q<') end |
.serialize_long(value) ⇒ Object
12 13 14 |
# File 'lib/mtproto/type/serializer.rb', line 12 def serialize_long(value) [value].pack('Q<') end |
.serialize_string(str) ⇒ Object
34 35 36 |
# File 'lib/mtproto/type/serializer.rb', line 34 def serialize_string(str) serialize_bytes(str) end |