Module: MTProto::Type::Serializer

Defined in:
lib/mtproto/type/serializer.rb

Class Method Summary collapse

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