userver: userver/storages/secdist/helpers.hpp Source File
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
helpers.hpp
1#pragma once
2
3#include <string>
4
5#include <userver/compiler/demangle.hpp>
6#include <userver/formats/json/value.hpp>
7
8USERVER_NAMESPACE_BEGIN
9
10namespace storages::secdist {
11
12[[noreturn]] void ThrowInvalidSecdistType(const formats::json::Value& val, std::string_view type);
13
14std::string GetString(const formats::json::Value& parent_val, std::string_view name);
15
16int GetInt(const formats::json::Value& parent_val, std::string_view name, int dflt);
17
18template <typename T>
19T GetValue(const formats::json::Value& parent_val, std::string_view key, const T& dflt) {
20 const auto& val = parent_val[key];
21 try {
22 return val.template As<T>(dflt);
23 } catch (const formats::json::TypeMismatchException&) {
24 ThrowInvalidSecdistType(val, compiler::GetTypeName<T>());
25 }
26}
27
28void CheckIsObject(const formats::json::Value& val, std::string_view name);
29
30void CheckIsArray(const formats::json::Value& val, std::string_view name);
31
32} // namespace storages::secdist
33
34USERVER_NAMESPACE_END