blob: 665253071bad9c2af42572a2c21bba9ac1e8c058 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SERVICES_NETWORK_PUBLIC_CPP_STRUCTURED_HEADERS_MOJOM_TRAITS_H_
#define SERVICES_NETWORK_PUBLIC_CPP_STRUCTURED_HEADERS_MOJOM_TRAITS_H_
#include <stdint.h>
#include <string>
#include <string_view>
#include <utility>
#include <vector>
#include "base/component_export.h"
#include "mojo/public/cpp/base/byte_string_mojom_traits.h"
#include "mojo/public/cpp/bindings/struct_traits.h"
#include "mojo/public/cpp/bindings/union_traits.h"
#include "net/http/structured_headers.h"
#include "services/network/public/mojom/structured_headers.mojom-shared.h"
namespace mojo {
template <>
struct COMPONENT_EXPORT(NETWORK_CPP_STRUCTURED_HEADERS)
UnionTraits<network::mojom::StructuredHeadersItemDataView,
net::structured_headers::Item> {
static network::mojom::StructuredHeadersItemDataView::Tag GetTag(
const net::structured_headers::Item&);
static uint8_t null_value(const net::structured_headers::Item&) { return 0; }
static int64_t integer_value(const net::structured_headers::Item& item) {
return item.GetInteger();
}
static double decimal_value(const net::structured_headers::Item& item) {
return item.GetDecimal();
}
static std::string_view string_value(
const net::structured_headers::Item& item) {
return item.GetString();
}
static std::string_view token_value(
const net::structured_headers::Item& item) {
return item.GetString();
}
static const std::string& byte_sequence_value(
const net::structured_headers::Item& item) {
return item.GetString();
}
static bool boolean_value(const net::structured_headers::Item& item) {
return item.GetBoolean();
}
static bool Read(network::mojom::StructuredHeadersItemDataView,
net::structured_headers::Item* out);
};
template <>
struct COMPONENT_EXPORT(NETWORK_CPP_STRUCTURED_HEADERS)
StructTraits<network::mojom::StructuredHeadersParameterDataView,
std::pair<std::string, net::structured_headers::Item>> {
static std::string_view key(
const std::pair<std::string, net::structured_headers::Item>& param) {
return param.first;
}
static const net::structured_headers::Item& item(
const std::pair<std::string, net::structured_headers::Item>& param) {
return param.second;
}
static bool Read(network::mojom::StructuredHeadersParameterDataView,
std::pair<std::string, net::structured_headers::Item>* out);
};
template <>
struct COMPONENT_EXPORT(NETWORK_CPP_STRUCTURED_HEADERS)
StructTraits<network::mojom::StructuredHeadersParameterizedItemDataView,
net::structured_headers::ParameterizedItem> {
static const net::structured_headers::Item& item(
const net::structured_headers::ParameterizedItem& item) {
return item.item;
}
static const std::vector<
std::pair<std::string, net::structured_headers::Item>>&
parameters(const net::structured_headers::ParameterizedItem& item) {
return item.params;
}
static bool Read(network::mojom::StructuredHeadersParameterizedItemDataView,
net::structured_headers::ParameterizedItem* out);
};
template <>
struct COMPONENT_EXPORT(NETWORK_CPP_STRUCTURED_HEADERS)
StructTraits<network::mojom::StructuredHeadersParameterizedMemberDataView,
net::structured_headers::ParameterizedMember> {
static const std::vector<net::structured_headers::ParameterizedItem>& member(
const net::structured_headers::ParameterizedMember& in) {
return in.member;
}
static bool member_is_inner_list(
const net::structured_headers::ParameterizedMember& in) {
return in.member_is_inner_list;
}
static const std::vector<
std::pair<std::string, net::structured_headers::Item>>&
parameters(const net::structured_headers::ParameterizedMember& in) {
return in.params;
}
static bool Read(network::mojom::StructuredHeadersParameterizedMemberDataView,
net::structured_headers::ParameterizedMember* out);
};
template <>
struct COMPONENT_EXPORT(NETWORK_CPP_STRUCTURED_HEADERS)
StructTraits<network::mojom::StructuredHeadersDictionaryMemberDataView,
net::structured_headers::DictionaryMember> {
static const std::string& key(
const net::structured_headers::DictionaryMember& in) {
return in.first;
}
static const net::structured_headers::ParameterizedMember& value(
const net::structured_headers::DictionaryMember& in) {
return in.second;
}
static bool Read(network::mojom::StructuredHeadersDictionaryMemberDataView,
net::structured_headers::DictionaryMember* out);
};
template <>
struct COMPONENT_EXPORT(NETWORK_CPP_STRUCTURED_HEADERS)
StructTraits<network::mojom::StructuredHeadersDictionaryDataView,
net::structured_headers::Dictionary> {
static std::vector<net::structured_headers::DictionaryMember> members(
const net::structured_headers::Dictionary& in);
static bool Read(network::mojom::StructuredHeadersDictionaryDataView,
net::structured_headers::Dictionary* out);
};
} // namespace mojo
#endif // SERVICES_NETWORK_PUBLIC_CPP_STRUCTURED_HEADERS_MOJOM_TRAITS_H_