/* * Copyright (c) 2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef META_INTERFACE_CALL_CONTEXT_H #define META_INTERFACE_CALL_CONTEXT_H #include #include #include #include #include #include META_BEGIN_NAMESPACE() struct ArgumentNameValue { BASE_NS::string name; IAny::Ptr value; }; /** * @brief Interface that contains parameter names and types, arguments and result type and value. * It is passed through when calling meta functions to provide arguments and other call context. * See meta/api/call_context.h for typed helper functions. */ class ICallContext : public CORE_NS::IInterface { META_INTERFACE(CORE_NS::IInterface, ICallContext, "2e9cac45-0e61-4152-8b2a-bc1c65fded3d") public: /** * @brief Define parameter name, type and default value. The parameters are added in order. * @param name Name of the parameter, fails if parameter already defined for same name. * @param value Type and default value for the parameter. * @return True on success */ virtual bool DefineParameter(BASE_NS::string_view name, const IAny::Ptr& value) = 0; /** * @brief Set argument value for parameter 'name'. * @param name Name of the parameter, parameter must have been defined with the same name. * @param value Value of the argument, the type must match with the define parameter type. * @return True on success */ virtual bool Set(BASE_NS::string_view name, const IAny& value) = 0; /** * @brief Get argument value for parameter 'name' * @param name Name of the parameter * @return Any containing the argument value or nullptr if no such parameter */ virtual IAny::Ptr Get(BASE_NS::string_view name) const = 0; /** * @brief List all parameters, these should be in the function parameter order (left to right). * @return List of parameters/argument values. */ virtual BASE_NS::array_view GetParameters() const = 0; /** * @brief Check if the call was successful. * @return True if SetResult was called with correct result type. */ virtual bool Succeeded() const = 0; /** * @brief Define result type, null means void which is also the default. * @param value Type of the result value, the value itself is overwritten by SetResult when setting result value. * @return True on success. */ virtual bool DefineResult(const IAny::Ptr& value) = 0; /** * @brief Set result value * @param value Return value, must match the defined result type. * @return True on success */ virtual bool SetResult(const IAny& value) = 0; /** * @brief Set result value for void function * @return True on success */ virtual bool SetResult() = 0; /** * @brief Get result value * @return Any containing the result value or nullptr if void result value (ie. no result). */ virtual IAny::Ptr GetResult() const = 0; /** * @brief Reset internal state, so that the same context can be used again for calling. * @note This does not change defined parameters or return type, just resets arguments/call result. */ virtual void Reset() = 0; /** * @brief Report error in the context of the meta call (default implementation logs to console) */ virtual void ReportError(BASE_NS::string_view error) = 0; }; META_END_NAMESPACE() META_TYPE(META_NS::ICallContext::Ptr) META_TYPE(META_NS::ICallContext::ConstPtr) META_TYPE(META_NS::ICallContext::WeakPtr) META_TYPE(META_NS::ICallContext::ConstWeakPtr) #endif