Class: Protobug::Field::IntegerField
- Inherits:
-
Field
- Object
- Field
- Protobug::Field::IntegerField
show all
- Defined in:
- lib/protobug/field.rb
Instance Method Summary
collapse
Instance Method Details
#binary_decode_one(io, _message, _registry, wire_type) ⇒ Object
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
|
# File 'lib/protobug/field.rb', line 464
def binary_decode_one(io, _message, _registry, wire_type)
value = BinaryEncoding.read_field_value(io, wire_type)
case encoding
when :zigzag
BinaryEncoding.decode_zigzag bit_length, value
when :varint
length_mask = (2**bit_length) - 1
negative = signed && value & (2**bit_length.pred) != 0
if negative
value &= length_mask
value ^= length_mask
value += 1
-value
else
value & length_mask
end
when :fixed
value.unpack1(binary_pack)
end
end
|
#binary_encode_one(value, outbuf) ⇒ Object
#default ⇒ Object
458
459
460
461
462
|
# File 'lib/protobug/field.rb', line 458
def default
return [] if repeated?
0
end
|
#json_decode_one(value, _ignore_unknown_fields, _registry) ⇒ Object
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
|
# File 'lib/protobug/field.rb', line 498
def json_decode_one(value, _ignore_unknown_fields, _registry)
return UNSET if value.nil?
case value
when Integer
when /\A-?\d+\z/
value = Integer(value)
when Float
int, remainder = value.divmod(1)
raise DecodeError, "expected integer for #{inspect}, got #{value.inspect}" unless remainder == 0
value = int
else
raise DecodeError, "expected integer for #{inspect}, got #{value.inspect}"
end
raise DecodeError, "#{value.inspect} does not fit in 64 bits" if value && value.bit_length > 64
value
end
|
#json_encode_one(value, print_unknown_fields:) ⇒ Object
rubocop:disable Lint/UnusedMethodArgument
519
520
521
522
523
524
525
|
# File 'lib/protobug/field.rb', line 519
def json_encode_one(value, print_unknown_fields:) if bit_length >= 64
value.to_s
else
value
end
end
|
#validate!(value, message) ⇒ Object
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
|
# File 'lib/protobug/field.rb', line 527
def validate!(value, message)
raise InvalidValueError.new(message, self, value, "expected integer") unless value.is_a?(Integer)
if signed
min = -2**(bit_length - 1)
max = 2**(bit_length - 1)
else
min = 0
max = 2**bit_length
end
if value < min || value >= max
raise InvalidValueError.new(message, self, value, "does not fit into [#{min}, #{max})")
end
super
end
|