// 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.
//
// --------- Warning: This is a build system generated file. ----------
//

//! @file
//!
//! @brief This file was generated by <i>omni.bind</i>.

#include <omni/core/Interface.h>
#include <omni/core/OmniAttr.h>
#include <omni/core/ResultError.h>

#include <functional>
#include <type_traits>
#include <utility>

#ifndef OMNI_BIND_INCLUDE_INTERFACE_IMPL


/**
 * Object that contains a value that is local to a graph, available from anywhere in the graph
 */
template <>
class omni::core::Generated<omni::graph::core::IVariable_abi> : public omni::graph::core::IVariable_abi
{
public:
    OMNI_PLUGIN_INTERFACE("omni::graph::core::IVariable")

    /**
     * Returns the name of the variable object. The name is derived by
     * removing any variable specific prefixes from the underlying attribute.
     *
     * @return The name of the variable.
     */
    const char* getName() noexcept;

    /**
     *  Returns the full path to the variables underlying attribute
     *
     *  @return The full usd path of the variable
     */
    const char* getSourcePath() noexcept;

    /**
     * Returns the type of the variable
     *
     * @return The type of the variable
     */
    omni::graph::core::Type getType() noexcept;

    /**
     * Returns the category of the variable
     *
     * @return The category of the variable, or an empty string if it is not set.
     */
    const char* getCategory() noexcept;

    /**
     * Sets the category of the variable
     *
     * @param[in] category A string representing the variable category
     */
    void setCategory(const char* category) noexcept;

    /**
     * Gets the display name of the variable. By default the display name is the same
     * as the variable name.
     *
     * @return The display name of the variable, or an empty string if it is not set.
     */
    const char* getDisplayName() noexcept;

    /**
     * Set the display name of the variable.
     *
     * @param[in] displayName A string to set the display name to
     */
    void setDisplayName(const char* displayName) noexcept;

    /**
     * Get the tooltip used for the variable.
     *
     * @return The tooltip of the variable, or an emtpy string if none is set.
     */
    const char* getTooltip() noexcept;

    /**
     * Set the tooltip used for the variable
     *
     * @param[in] toolTip A description used as a tooltip.
     */
    void setTooltip(const char* toolTip) noexcept;

    /**
     * Get the scope of the variable. The scope determines which graphs can read and write the value.
     *
     * @return The scope of the variable.
     */
    omni::graph::core::eVariableScope getScope() noexcept;

    /**
     * Sets the scope of the variable.
     *
     * @param[in] scope The scope to set on the variable.
     */
    void setScope(omni::graph::core::eVariableScope scope) noexcept;

    /**
     * Returns whether this variable is valid
     *
     * @return True if the variable is valid, false otherwise
     */
    bool isValid() noexcept;
};

#endif

#ifndef OMNI_BIND_INCLUDE_INTERFACE_DECL

inline const char* omni::core::Generated<omni::graph::core::IVariable_abi>::getName() noexcept
{
    return getName_abi();
}

inline const char* omni::core::Generated<omni::graph::core::IVariable_abi>::getSourcePath() noexcept
{
    return getSourcePath_abi();
}

inline omni::graph::core::Type omni::core::Generated<omni::graph::core::IVariable_abi>::getType() noexcept
{
    return getType_abi();
}

inline const char* omni::core::Generated<omni::graph::core::IVariable_abi>::getCategory() noexcept
{
    return getCategory_abi();
}

inline void omni::core::Generated<omni::graph::core::IVariable_abi>::setCategory(const char* category) noexcept
{
    setCategory_abi(category);
}

inline const char* omni::core::Generated<omni::graph::core::IVariable_abi>::getDisplayName() noexcept
{
    return getDisplayName_abi();
}

inline void omni::core::Generated<omni::graph::core::IVariable_abi>::setDisplayName(const char* displayName) noexcept
{
    setDisplayName_abi(displayName);
}

inline const char* omni::core::Generated<omni::graph::core::IVariable_abi>::getTooltip() noexcept
{
    return getTooltip_abi();
}

inline void omni::core::Generated<omni::graph::core::IVariable_abi>::setTooltip(const char* toolTip) noexcept
{
    setTooltip_abi(toolTip);
}

inline omni::graph::core::eVariableScope omni::core::Generated<omni::graph::core::IVariable_abi>::getScope() noexcept
{
    return getScope_abi();
}

inline void omni::core::Generated<omni::graph::core::IVariable_abi>::setScope(omni::graph::core::eVariableScope scope) noexcept
{
    setScope_abi(scope);
}

inline bool omni::core::Generated<omni::graph::core::IVariable_abi>::isValid() noexcept
{
    return isValid_abi();
}

#endif

#undef OMNI_BIND_INCLUDE_INTERFACE_DECL
#undef OMNI_BIND_INCLUDE_INTERFACE_IMPL
