// Copyright 2014 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 MOJO_PUBLIC_CPP_BINDINGS_LIB_STRING_SERIALIZATION_H_ #define MOJO_PUBLIC_CPP_BINDINGS_LIB_STRING_SERIALIZATION_H_ #include #include #include "mojo/public/cpp/bindings/lib/array_internal.h" #include "mojo/public/cpp/bindings/lib/serialization_forward.h" #include "mojo/public/cpp/bindings/lib/serialization_util.h" #include "mojo/public/cpp/bindings/string_data_view.h" #include "mojo/public/cpp/bindings/string_traits.h" namespace mojo { namespace internal { template struct Serializer { using UserType = typename std::remove_const::type; using Traits = StringTraits; static void Serialize(MaybeConstUserType& input, Buffer* buffer, String_Data::BufferWriter* writer, SerializationContext* context) { if (CallIsNullIfExists(input)) return; void* custom_context = CustomContextHelper::SetUp(input, context); const size_t size = CallWithContext(Traits::GetSize, input, custom_context); writer->Allocate(size, buffer); memcpy((*writer)->storage(), CallWithContext(Traits::GetData, input, custom_context), size); CustomContextHelper::TearDown(input, custom_context); } static bool Deserialize(String_Data* input, UserType* output, SerializationContext* context) { if (!input) return CallSetToNullIfExists(output); return Traits::Read(StringDataView(input, context), output); } }; } // namespace internal } // namespace mojo #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_STRING_SERIALIZATION_H_