// Copyright (c) 2022-2023, NVIDIA CORPORATION. All rights reserved.
//
// NVIDIA CORPORATION and its licensors retain all intellectual property
// and proprietary rights in and to this software, related documentation
// and any modifications thereto. Any use, reproduction, disclosure or
// distribution of this software and related documentation without an express
// license agreement from NVIDIA CORPORATION is strictly prohibited.
//
//! @file
//! @brief Helper functions for collecting module information.
#pragma once

#include "../../carb/Interface.h"

//! Used to declare the interface description for an ONI object's API layer.
//!
//! @param[in] name     The fully qualified name of the interface (as a string literal)
//!                     that contains this call.  This call must be made from the class
//!                     scope for the interface's API layer.
//!
//! @note This does not need to be called directly if the `omni.bind` tool is being used
//!       to generate the API layer for an interface.  The `omni.bind` tool will insert
//!       this call automatically.
#define OMNI_PLUGIN_INTERFACE(name)                                                                                    \
    /**                                                                                                                \
     * Returns information about this interface. Auto-generated by OMNI_PLUGIN_INTERFACE().                            \
     * @returns The carb::InterfaceDesc struct with information about this interface.                                  \
     */                                                                                                                \
    static carb::InterfaceDesc getInterfaceDesc()                                                                      \
    {                                                                                                                  \
        return carb::InterfaceDesc{ name, { 1, 0 } };                                                                  \
    }
