blob: 1799d71f5caf2df31ae9a1a39b38510f500df2f1 [file] [log] [blame]
// Copyright 2021 The Fuchsia 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 LIB_FIDL_DRIVER_CPP_WIRE_TYPES_H_
#define LIB_FIDL_DRIVER_CPP_WIRE_TYPES_H_
#include <lib/fidl/cpp/wire/wire_coding_traits.h>
#include <lib/fidl/cpp/wire/wire_types.h>
#include <lib/fidl_driver/cpp/transport.h>
namespace fidl::internal {
template <typename Constraint, bool IsRecursive>
struct WireCodingTraits<::fdf::Channel, Constraint, IsRecursive> {
static constexpr size_t inline_size = sizeof(fdf_handle_t);
static constexpr bool is_memcpy_compatible = false;
static void Encode(WireEncoder* encoder, ::fdf::Channel* value, WirePosition position,
RecursionDepth<IsRecursive> recursion_depth) {
encoder->EncodeHandle(value->release(), {}, position, Constraint::is_optional);
}
static void Decode(WireDecoder* decoder, WirePosition position,
RecursionDepth<IsRecursive> recursion_depth) {
decoder->DecodeHandle(position, {}, Constraint::is_optional);
}
};
template <typename T, typename Constraint, bool IsRecursive>
struct WireCodingTraits<::fdf::ServerEnd<T>, Constraint, IsRecursive> {
static constexpr size_t inline_size = sizeof(fdf_handle_t);
static constexpr bool is_memcpy_compatible = false;
static void Encode(WireEncoder* encoder, ::fdf::ServerEnd<T>* value, WirePosition position,
RecursionDepth<IsRecursive> recursion_depth) {
encoder->EncodeHandle(value->TakeHandle().release(), {}, position, Constraint::is_optional);
}
static void Decode(WireDecoder* decoder, WirePosition position,
RecursionDepth<IsRecursive> recursion_depth) {
decoder->DecodeHandle(position, {}, Constraint::is_optional);
}
};
template <typename T, typename Constraint, bool IsRecursive>
struct WireCodingTraits<::fdf::ClientEnd<T>, Constraint, IsRecursive> {
static constexpr size_t inline_size = sizeof(fdf_handle_t);
static constexpr bool is_memcpy_compatible = false;
static void Encode(WireEncoder* encoder, ::fdf::ClientEnd<T>* value, WirePosition position,
RecursionDepth<IsRecursive> recursion_depth) {
encoder->EncodeHandle(value->TakeHandle().release(), {}, position, Constraint::is_optional);
}
static void Decode(WireDecoder* decoder, WirePosition position,
RecursionDepth<IsRecursive> recursion_depth) {
decoder->DecodeHandle(position, {}, Constraint::is_optional);
}
};
} // namespace fidl::internal
#endif // LIB_FIDL_DRIVER_CPP_WIRE_TYPES_H_