class ActiveRecord::Encryption::MessagePackMessageSerializer

Then it is converted to the MessagePack format.
}
}

header2: value2,
header1: value1,
h: {
p: <payload>,
{
The message is converted to a hash with this structure:
A message serializer that serializes Messages with MessagePack.

def binary?

def binary?
  true
end

def dump(message)

def dump(message)
  raise Errors::ForbiddenClass unless message.is_a?(Message)
  ActiveSupport::MessagePack.dump(message_to_hash(message))
end

def hash_to_message(data, level)

def hash_to_message(data, level)
  validate_message_data_format(data, level)
  Message.new(payload: data["p"], headers: parse_properties(data["h"], level))
end

def headers_to_hash(headers)

def headers_to_hash(headers)
  headers.transform_values do |value|
    value.is_a?(Message) ? message_to_hash(value) : value
  end
end

def load(serialized_content)

def load(serialized_content)
  data = ActiveSupport::MessagePack.load(serialized_content)
  hash_to_message(data, 1)
rescue RuntimeError
  raise Errors::Decryption
end

def message_to_hash(message)

def message_to_hash(message)
  {
    "p" => message.payload,
    "h" => headers_to_hash(message.headers)
  }
end

def parse_properties(headers, level)

def parse_properties(headers, level)
  Properties.new.tap do |properties|
    headers&.each do |key, value|
      properties[key] = value.is_a?(Hash) ? hash_to_message(value, level + 1) : value
    end
  end
end

def validate_message_data_format(data, level)

def validate_message_data_format(data, level)
  if level > 2
    raise Errors::Decryption, "More than one level of hash nesting in headers is not supported"
  end
  unless data.is_a?(Hash) && data.has_key?("p")
    raise Errors::Decryption, "Invalid data format: hash without payload"
  end
end