class Scale::Types::MetadataModuleStorage

Public Class Methods

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

  is_key_value = Bool.decode(scale_bytes).value
  result[:type] = if is_key_value
                    {
                      Map: {
                        key: String.decode(scale_bytes).value,
                        value: String.decode(scale_bytes).value,
                        linked: Bool.decode(scale_bytes).value
                      }
                    }
                  else
                    {
                      Plain: String.decode(scale_bytes).value
                    }
                  end

  result[:fallback] = Hex.decode(scale_bytes).value
  result[:documentation] = Scale::Types.get("Vec<String>").decode(scale_bytes).value.map(&:value)

  MetadataModuleStorage.new(result)
end