module ActiveModelSerializers::Adapter::JsonApi::Deserialization

def validate_payload(payload)

Other tags:
    Api: - private
def validate_payload(payload)
  unless payload.is_a?(Hash)
    yield payload, 'Expected hash'
    return
  end
  primary_data = payload['data']
  unless primary_data.is_a?(Hash)
    yield payload, { data: 'Expected hash' }
    return
  end
  attributes = primary_data['attributes'] || {}
  unless attributes.is_a?(Hash)
    yield payload, { data: { attributes: 'Expected hash or nil' } }
    return
  end
  relationships = primary_data['relationships'] || {}
  unless relationships.is_a?(Hash)
    yield payload, { data: { relationships: 'Expected hash or nil' } }
    return
  end
  relationships.each do |(key, value)|
    unless value.is_a?(Hash) && value.key?('data')
      yield payload, { data: { relationships: { key => 'Expected hash with :data key' } } }
    end
  end
end