103 VariableType
Parse(
const DocsMap& docs_map)
const;
106 friend struct impl::ConfigIdGetter;
108 const impl::ConfigId id_;
125class Snapshot
final {
127 Snapshot(
const Snapshot&);
128 Snapshot& operator=(
const Snapshot&);
130 Snapshot(Snapshot&&)
noexcept;
131 Snapshot& operator=(Snapshot&&)
noexcept;
136 template <
typename VariableType>
137 const VariableType&
operator[](
const Key<VariableType>& key)
const& USERVER_IMPL_LIFETIME_BOUND;
140 template <
typename VariableType>
141 const VariableType&
operator[](
const Key<VariableType>&) &&;
145 template <
typename T>
146 const T& Get()
const& USERVER_IMPL_LIFETIME_BOUND;
149 template <
typename T>
156 friend class impl::StorageData;
159 explicit Snapshot(
const impl::StorageData& storage);
161 const impl::SnapshotData& GetData()
const;
164 utils::FastPimpl<Impl, 16, 8> impl_;
169constexpr DefaultAsJsonString::DefaultAsJsonString(std::string_view json_string)
170 : json_string(json_string)
174ConfigDefault::ConfigDefault(std::string_view name,
const T& value)
176 default_json(impl::ToJsonString(value))
179template <
typename Variable>
180Key<Variable>::
Key(std::string_view name,
const VariableType& default_value)
181 : id_(impl::Register(
183 [name = std::string{name}](
const auto& docs_map) -> std::any {
184 return impl::DocsMapGet(docs_map, name).
template As<VariableType>();
186 impl::ValueToDocsMapString(name, default_value)
190template <
typename Variable>
191Key<Variable>::
Key(std::string_view name, DefaultAsJsonString default_json)
192 : id_(impl::Register(
194 [name = std::string{name}](
const auto& docs_map) -> std::any {
195 return impl::DocsMapGet(docs_map, name).
template As<VariableType>();
197 impl::SingleToDocsMapString(name, default_json.json_string)
201template <
typename Variable>
202Key<Variable>::
Key(std::string_view name, JsonParser parser, DefaultAsJsonString default_json)
203 : id_(impl::Register(
205 [name = std::string{name}, parser](
const auto& docs_map) -> std::any {
206 return parser(impl::DocsMapGet(docs_map, name));
208 impl::SingleToDocsMapString(name, default_json.json_string)
212template <
typename Variable>
213template <std::size_t N>
214Key<Variable>::
Key(DocsMapParser parser,
const ConfigDefault (&default_json_map)[N])
215 : id_(impl::Register(
217 [parser](
const DocsMap& docs_map) -> std::any {
return parser(docs_map); },
218 impl::MultipleToDocsMapString(default_json_map, N)
222template <
typename Variable>
223Key<Variable>::
Key(ConstantConfig , VariableType value)
224 : id_(impl::Register(std::string{}, [value = std::move(value)](
const DocsMap& ) {
return value; },
"{}"))
227template <
typename Variable>
228Key<Variable>::Key(impl::InternalTag, std::string_view name)
229 : id_(impl::Register(
231 [name = std::string{name}](
const auto& docs_map) -> std::any {
232 return impl::DocsMapGet(docs_map, name).
template As<VariableType>();
238template <
typename Variable>
239Key<Variable>::Key(impl::InternalTag, DocsMapParser parser)
240 : id_(impl::Register(
242 [parser](
const DocsMap& docs_map) -> std::any {
return parser(docs_map); },
247template <
typename VariableType>
248std::string_view Key<VariableType>::
GetName()
const noexcept {
249 return impl::GetName(id_);
252template <
typename VariableType>
253VariableType Key<VariableType>::
Parse(
const DocsMap& docs_map)
const {
254 return std::any_cast<VariableType>(impl::MakeConfig(id_, docs_map));