blob: 8101fafd9a1fa8d89284448e0de4f968aa0e316f [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_PUBLIC_COMMON_INDEXEDDB_INDEXED_DB_DEFAULT_MOJOM_TRAITS_H_
#define THIRD_PARTY_BLINK_PUBLIC_COMMON_INDEXEDDB_INDEXED_DB_DEFAULT_MOJOM_TRAITS_H_
#include "base/containers/span.h"
#include "mojo/public/cpp/bindings/array_traits_span.h"
#include "third_party/blink/public/common/common_export.h"
#include "third_party/blink/public/common/indexeddb/indexeddb_key.h"
#include "third_party/blink/public/common/indexeddb/indexeddb_key_range.h"
#include "third_party/blink/public/common/indexeddb/indexeddb_metadata.h"
#include "third_party/blink/public/mojom/indexeddb/indexeddb.mojom-forward.h"
namespace mojo {
template <>
struct BLINK_COMMON_EXPORT
StructTraits<blink::mojom::IDBDatabaseMetadataDataView,
blink::IndexedDBDatabaseMetadata> {
static int64_t id(const blink::IndexedDBDatabaseMetadata& metadata) {
return metadata.id;
}
static const base::string16& name(
const blink::IndexedDBDatabaseMetadata& metadata) {
return metadata.name;
}
static int64_t version(const blink::IndexedDBDatabaseMetadata& metadata) {
return metadata.version;
}
static int64_t max_object_store_id(
const blink::IndexedDBDatabaseMetadata& metadata) {
return metadata.max_object_store_id;
}
static std::map<int64_t, blink::IndexedDBObjectStoreMetadata> object_stores(
const blink::IndexedDBDatabaseMetadata& metadata) {
return metadata.object_stores;
}
static bool was_cold_open(const blink::IndexedDBDatabaseMetadata& metadata) {
return metadata.was_cold_open;
}
static bool Read(blink::mojom::IDBDatabaseMetadataDataView data,
blink::IndexedDBDatabaseMetadata* out);
};
template <>
struct BLINK_COMMON_EXPORT StructTraits<blink::mojom::IDBIndexKeysDataView,
blink::IndexedDBIndexKeys> {
static int64_t index_id(const blink::IndexedDBIndexKeys& index_keys) {
return index_keys.id;
}
static const std::vector<blink::IndexedDBKey>& index_keys(
const blink::IndexedDBIndexKeys& index_keys) {
return index_keys.keys;
}
static bool Read(blink::mojom::IDBIndexKeysDataView data,
blink::IndexedDBIndexKeys* out);
};
template <>
struct BLINK_COMMON_EXPORT StructTraits<blink::mojom::IDBIndexMetadataDataView,
blink::IndexedDBIndexMetadata> {
static int64_t id(const blink::IndexedDBIndexMetadata& metadata) {
return metadata.id;
}
static const base::string16& name(
const blink::IndexedDBIndexMetadata& metadata) {
return metadata.name;
}
static const blink::IndexedDBKeyPath& key_path(
const blink::IndexedDBIndexMetadata& metadata) {
return metadata.key_path;
}
static bool unique(const blink::IndexedDBIndexMetadata& metadata) {
return metadata.unique;
}
static bool multi_entry(const blink::IndexedDBIndexMetadata& metadata) {
return metadata.multi_entry;
}
static bool Read(blink::mojom::IDBIndexMetadataDataView data,
blink::IndexedDBIndexMetadata* out);
};
template <>
struct BLINK_COMMON_EXPORT
UnionTraits<blink::mojom::IDBKeyDataView, blink::IndexedDBKey> {
static blink::mojom::IDBKeyDataView::Tag GetTag(
const blink::IndexedDBKey& key);
static bool Read(blink::mojom::IDBKeyDataView data, blink::IndexedDBKey* out);
static const std::vector<blink::IndexedDBKey>& key_array(
const blink::IndexedDBKey& key) {
return key.array();
}
static base::span<const uint8_t> binary(const blink::IndexedDBKey& key) {
return base::make_span(
reinterpret_cast<const uint8_t*>(key.binary().data()),
key.binary().size());
}
static const base::string16& string(const blink::IndexedDBKey& key) {
return key.string();
}
static double date(const blink::IndexedDBKey& key) { return key.date(); }
static double number(const blink::IndexedDBKey& key) { return key.number(); }
static bool other_invalid(const blink::IndexedDBKey& key) {
return key.type() == blink::mojom::IDBKeyType::Invalid;
}
static bool other_none(const blink::IndexedDBKey& key) {
return key.type() == blink::mojom::IDBKeyType::None;
}
};
template <>
struct BLINK_COMMON_EXPORT
StructTraits<blink::mojom::IDBKeyPathDataView, blink::IndexedDBKeyPath> {
static blink::mojom::IDBKeyPathDataPtr data(
const blink::IndexedDBKeyPath& key_path);
static bool Read(blink::mojom::IDBKeyPathDataView data,
blink::IndexedDBKeyPath* out);
};
template <>
struct BLINK_COMMON_EXPORT
StructTraits<blink::mojom::IDBKeyRangeDataView, blink::IndexedDBKeyRange> {
static const blink::IndexedDBKey& lower(
const blink::IndexedDBKeyRange& key_range) {
return key_range.lower();
}
static const blink::IndexedDBKey& upper(
const blink::IndexedDBKeyRange& key_range) {
return key_range.upper();
}
static bool lower_open(const blink::IndexedDBKeyRange& key_range) {
return key_range.lower_open();
}
static bool upper_open(const blink::IndexedDBKeyRange& key_range) {
return key_range.upper_open();
}
static bool Read(blink::mojom::IDBKeyRangeDataView data,
blink::IndexedDBKeyRange* out);
};
template <>
struct BLINK_COMMON_EXPORT
StructTraits<blink::mojom::IDBObjectStoreMetadataDataView,
blink::IndexedDBObjectStoreMetadata> {
static int64_t id(const blink::IndexedDBObjectStoreMetadata& metadata) {
return metadata.id;
}
static const base::string16& name(
const blink::IndexedDBObjectStoreMetadata& metadata) {
return metadata.name;
}
static const blink::IndexedDBKeyPath& key_path(
const blink::IndexedDBObjectStoreMetadata& metadata) {
return metadata.key_path;
}
static bool auto_increment(
const blink::IndexedDBObjectStoreMetadata& metadata) {
return metadata.auto_increment;
}
static int64_t max_index_id(
const blink::IndexedDBObjectStoreMetadata& metadata) {
return metadata.max_index_id;
}
static std::map<int64_t, blink::IndexedDBIndexMetadata> indexes(
const blink::IndexedDBObjectStoreMetadata& metadata) {
return metadata.indexes;
}
static bool Read(blink::mojom::IDBObjectStoreMetadataDataView data,
blink::IndexedDBObjectStoreMetadata* out);
};
} // namespace mojo
#endif // THIRD_PARTY_BLINK_PUBLIC_COMMON_INDEXEDDB_INDEXED_DB_DEFAULT_MOJOM_TRAITS_H_