// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #pragma once #include "configpayload.h" #include #include namespace config::internal { void requireValid(vespalib::stringref __fieldName, const ::vespalib::slime::Inspector & __inspector); template T convertValue(const ::vespalib::slime::Inspector & __inspector) { return T(::config::ConfigPayload(__inspector)); } template<> int32_t convertValue(const ::vespalib::slime::Inspector & __inspector); template<> int64_t convertValue(const ::vespalib::slime::Inspector & __inspector); template<> double convertValue(const ::vespalib::slime::Inspector & __inspector); template<> bool convertValue(const ::vespalib::slime::Inspector & __inspector); template<> vespalib::string convertValue(const ::vespalib::slime::Inspector & __inspector); template struct ValueConverter { T operator()(vespalib::stringref __fieldName, const ::vespalib::slime::Inspector & __inspector) { requireValid(__fieldName, __inspector); return convertValue(__inspector); } T operator()(const ::vespalib::slime::Inspector & __inspector) { return __inspector.valid() ? convertValue(__inspector) : T(); } T operator()(const ::vespalib::slime::Inspector & __inspector, T __t) { return __inspector.valid() ? convertValue(__inspector) : __t; } }; }