| Index: mojo/public/cpp/bindings/lib/serialization_util.h
|
| diff --git a/mojo/public/cpp/bindings/lib/serialization_util.h b/mojo/public/cpp/bindings/lib/serialization_util.h
|
| index 8e926cc5e832803781cf6b8e9a026e4be8ced18f..aa5806722c65fb5feeb304c63330da90d8e495ef 100644
|
| --- a/mojo/public/cpp/bindings/lib/serialization_util.h
|
| +++ b/mojo/public/cpp/bindings/lib/serialization_util.h
|
| @@ -102,20 +102,6 @@ inline void InterfaceDataToPointer(Interface_Data* input,
|
| input->version));
|
| }
|
|
|
| -// TODO(yzshen): Unify StructTraits::Read*() methods and remove
|
| -// HasReadFromDataViewMethod.
|
| -template <typename T>
|
| -struct HasReadFromDataViewMethod {
|
| - template <typename U>
|
| - static char Test(decltype(U::ReadFromDataView)*);
|
| - template <typename U>
|
| - static int Test(...);
|
| - static const bool value = sizeof(Test<T>(0)) == sizeof(char);
|
| -
|
| - private:
|
| - EnsureTypeIsComplete<T> check_t_;
|
| -};
|
| -
|
| template <typename T>
|
| struct HasIsNullMethod {
|
| template <typename U>
|
| @@ -143,6 +129,37 @@ template <
|
| bool CallIsNullIfExists(const UserType& input) {
|
| return false;
|
| }
|
| +template <typename T>
|
| +struct HasSetToNullMethod {
|
| + template <typename U>
|
| + static char Test(decltype(U::SetToNull)*);
|
| + template <typename U>
|
| + static int Test(...);
|
| + static const bool value = sizeof(Test<T>(0)) == sizeof(char);
|
| +
|
| + private:
|
| + EnsureTypeIsComplete<T> check_t_;
|
| +};
|
| +
|
| +template <
|
| + typename Traits,
|
| + typename UserType,
|
| + typename std::enable_if<HasSetToNullMethod<Traits>::value>::type* = nullptr>
|
| +bool CallSetToNullIfExists(UserType* output) {
|
| + Traits::SetToNull(output);
|
| + return true;
|
| +}
|
| +
|
| +template <typename Traits,
|
| + typename UserType,
|
| + typename std::enable_if<!HasSetToNullMethod<Traits>::value>::type* =
|
| + nullptr>
|
| +bool CallSetToNullIfExists(UserType* output) {
|
| + LOG(ERROR) << "A null value is received. But the Struct/Array/StringTraits "
|
| + << "class doesn't define a SetToNull() function and therefore is "
|
| + << "unable to deserialize the value.";
|
| + return false;
|
| +}
|
|
|
| template <typename T>
|
| struct HasSetUpContextMethod {
|
|
|