class IcAgent::Candid::TupleClass

Represents Tuple, a syntactic sugar for Record.

Attributes

components[RW]

Public Class Methods

new(*_components) click to toggle source
Calls superclass method IcAgent::Candid::RecordClass::new
# File lib/ic_agent/candid.rb, line 867
def initialize(*_components)
  x = {}
  _components.each_with_index do |v, i|
    x["_#{i}_"] = v
  end
  super(x)
  @components = _components
end

Public Instance Methods

covariant(x) click to toggle source
# File lib/ic_agent/candid.rb, line 876
def covariant(x)
  unless x.is_a?(Array)
    raise ValueError, 'Expected tuple type input.'
  end

  @components.each_with_index do |v, idx|
    unless v.covariant(x[idx])
      return false
    end
  end
  x.length >= @fields.length
end
decode_value(b, t) click to toggle source
# File lib/ic_agent/candid.rb, line 897
def decode_value(b, t)
  tup = check_type(t)
  unless tup.is_a?(TupleClass)
    raise ValueError, 'not a tuple type'
  end
  unless tup.components.length == @components.length
    raise ValueError, 'tuple mismatch'
  end

  res = []
  tup.components.each_with_index do |wireType, i|
    if i >= @components.length
      wireType.decode_value(b, wireType)
    else
      res << @components[i].decode_value(b, wireType)
    end
  end
  res
end
display() click to toggle source
# File lib/ic_agent/candid.rb, line 921
def display
  d = @components.map { |item| item.display() }
  "record {#{d.join(';')}}"
end
encode_value(val) click to toggle source
# File lib/ic_agent/candid.rb, line 889
def encode_value(val)
  bufs = ''.b
  @components.each_with_index do |_, i|
    bufs += @components[i].encode_value(val[i])
  end
  bufs
end
id() click to toggle source
# File lib/ic_agent/candid.rb, line 917
def id
  TypeIds::Tuple
end