class Scale::Types::MetadataV1ModuleStorage

Public Class Methods

decode(scale_bytes) click to toggle source
# File lib/metadata/metadata_v1.rb, line 87
def self.decode(scale_bytes)
  name = Bytes.decode(scale_bytes).value
  enum = {
    "type" => "enum",
    "value_list" => ["Optional", "Default"]
  }
  modifier = Scale::Types.get(enum).decode(scale_bytes).value

  is_key_value = Bool.decode(scale_bytes).value

  if is_key_value
    type = {
      Map: {
        key: Bytes.decode(scale_bytes).value,
        value: Bytes.decode(scale_bytes).value
      }
    }
  else
    type = {
      Plain: Bytes.decode(scale_bytes).value
    }
  end

  fallback = Hex.decode(scale_bytes).value
  docs = Scale::Types.get("Vec<Bytes>").decode(scale_bytes).value.map(&:value)

  MetadataV1ModuleStorage.new({
    name: name,
    modifier: modifier,
    type: type,
    fallback: fallback,
    documentation: docs
  })
end