910e62b5创建于 1月15日历史提交
// Copyright 2025 The Chromium Authors
// 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_HAS_SEND_VALIDATION_HELPER_H_
#define MOJO_PUBLIC_CPP_BINDINGS_LIB_HAS_SEND_VALIDATION_HELPER_H_

namespace mojo::internal {

// Primary template declaration (incomplete type) for send validation
// serializer.
template <typename MojomType,
          typename MaybeConstUserType,
          SendValidation send_validation>
struct SendValidationSerializer;

// Helpers to detect if a specialization of SendValidationSerializer exists.
template <typename MojomType,
          typename MaybeConstUserType,
          SendValidation send_validation,
          typename = void>
struct HasSendValidationSerializer : std::false_type {};

template <typename MojomType,
          typename MaybeConstUserType,
          SendValidation send_validation>
struct HasSendValidationSerializer<
    MojomType,
    MaybeConstUserType,
    send_validation,
    std::void_t<decltype(SendValidationSerializer<MojomType,
                                                  MaybeConstUserType,
                                                  send_validation>{})>>
    : std::true_type {};

// Primary template for checking if a Serialize with SendValidation function
// is defined. Default to true, because most objects have validation on send
// capabilities.
template <typename MojomType, typename InputUserType, typename = void>
struct HasSendValidationSerialize : std::true_type {};

// Helper constant for easier usage.
template <typename MojomType, typename InputUserType>
inline constexpr bool HasSendValidationSerialize_v =
    HasSendValidationSerialize<MojomType, InputUserType>::value;
}  // namespace mojo::internal

#endif  // MOJO_PUBLIC_CPP_BINDINGS_LIB_HAS_SEND_VALIDATION_HELPER_H_