1 // Copyright 2016 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_MAP_TRAITS_H_ 6 #define MOJO_PUBLIC_CPP_BINDINGS_MAP_TRAITS_H_ 7 8 namespace mojo { 9 10 // This must be specialized for any type |T| to be serialized/deserialized as 11 // a mojom map. 12 // 13 // Usually you would like to do a partial specialization for a map template. 14 // Imagine you want to specialize it for CustomMap<>, you need to implement: 15 // 16 // template <typename K, typename V> 17 // struct MapTraits<CustomMap<K, V>> { 18 // using Key = K; 19 // using Value = V; 20 // 21 // // These two methods are optional. Please see comments in struct_traits.h 22 // static bool IsNull(const CustomMap<K, V>& input); 23 // static void SetToNull(CustomMap<K, V>* output); 24 // 25 // static size_t GetSize(const CustomMap<K, V>& input); 26 // 27 // static CustomConstIterator GetBegin(const CustomMap<K, V>& input); 28 // static CustomIterator GetBegin(CustomMap<K, V>& input); 29 // 30 // static void AdvanceIterator(CustomConstIterator& iterator); 31 // static void AdvanceIterator(CustomIterator& iterator); 32 // 33 // static const K& GetKey(CustomIterator& iterator); 34 // static const K& GetKey(CustomConstIterator& iterator); 35 // 36 // static V& GetValue(CustomIterator& iterator); 37 // static const V& GetValue(CustomConstIterator& iterator); 38 // 39 // // Returning false results in deserialization failure and causes the 40 // // message pipe receiving it to be disconnected. 41 // static bool Insert(CustomMap<K, V>& input, 42 // const K& key, 43 // V&& value); 44 // static bool Insert(CustomMap<K, V>& input, 45 // const K& key, 46 // const V& value); 47 // 48 // static void SetToEmpty(CustomMap<K, V>* output); 49 // }; 50 // 51 template <typename T> 52 struct MapTraits; 53 54 } // namespace mojo 55 56 #endif // MOJO_PUBLIC_CPP_BINDINGS_MAP_TRAITS_H_ 57