1// Copyright 2018 The Fuchsia 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#pragma once
6
7#include <fbl/type_support.h>
8
9namespace ddk {
10namespace internal {
11
12DECLARE_HAS_MEMBER_FN_WITH_SIGNATURE(has_canvas_config, CanvasConfig,
13        zx_status_t (C::*)(zx_handle_t, size_t, canvas_info_t*, uint8_t*));
14DECLARE_HAS_MEMBER_FN_WITH_SIGNATURE(has_canvas_free, CanvasFree,
15        zx_status_t (C::*)(uint8_t));
16
17template <typename D>
18constexpr void CheckCanvasProtocolSubclass() {
19    static_assert(internal::has_canvas_config<D>::value,
20                  "CanvasProtocol subclasses must implement "
21                  "CanvasConfig(zx_handle_t vmo, size_t offset, canvas_info_t* info, "
22                  "uint8_t* canvas_idx)");
23    static_assert(internal::has_canvas_free<D>::value,
24                  "CanvasProtocol subclasses must implement "
25                  "CanvasFree(uint8_t canvas_idx)");
26 }
27
28}  // namespace internal
29}  // namespace ddk
30