Select Git revision
FunctionArgumentConverter.hpp
FunctionArgumentConverter.hpp 1.22 KiB
#ifndef FUNCTION_ARGUMENT_CONVERTER_HPP
#define FUNCTION_ARGUMENT_CONVERTER_HPP
#include <DataVariant.hpp>
#include <node_processor/ExecutionPolicy.hpp>
class IFunctionArgumentConverter
{
public:
virtual DataVariant convert(ExecutionPolicy& exec_policy, DataVariant&& value) = 0;
virtual ~IFunctionArgumentConverter() = default;
};
template <typename ExpectedValueType, typename ProvidedValueType>
class FunctionArgumentConverter final : public IFunctionArgumentConverter
{
private:
size_t m_argument_id;
public:
DataVariant
convert(ExecutionPolicy& exec_policy, DataVariant&& value)
{
if constexpr (std::is_same_v<ExpectedValueType, ProvidedValueType>) {
exec_policy.currentContext()[m_argument_id] = std::move(value);
} else if constexpr (std::is_same_v<ExpectedValueType, std::string>) {
exec_policy.currentContext()[m_argument_id] = std::move(std::to_string(std::get<ProvidedValueType>(value)));
} else {
exec_policy.currentContext()[m_argument_id] =
std::move(static_cast<ExpectedValueType>(std::get<ProvidedValueType>(value)));
}
return {};
}
FunctionArgumentConverter(size_t argument_id) : m_argument_id{argument_id} {}
};
#endif // FUNCTION_ARGUMENT_CONVERTER_HPP