103 VariableType
Parse(
const DocsMap& docs_map)
const;
106 friend struct impl::ConfigIdGetter;
108 const impl::ConfigId id_;
129class Snapshot
final {
131 Snapshot(
const Snapshot&);
132 Snapshot& operator=(
const Snapshot&);
134 Snapshot(Snapshot&&)
noexcept;
135 Snapshot& operator=(Snapshot&&)
noexcept;
140 template <
typename VariableType>
141 const VariableType&
operator[](
const Key<VariableType>& key)
const& USERVER_IMPL_LIFETIME_BOUND;
144 template <
typename VariableType>
145 const VariableType&
operator[](
const Key<VariableType>&) &&;
149 template <
typename T>
150 const T& Get()
const& USERVER_IMPL_LIFETIME_BOUND;
153 template <
typename T>
160 friend class impl::StorageData;
163 explicit Snapshot(
const impl::StorageData& storage);
165 const impl::SnapshotData& GetData()
const;
168 utils::FastPimpl<Impl, 16, 8> impl_;
173constexpr DefaultAsJsonString::DefaultAsJsonString(std::string_view json_string)
174 : json_string(json_string)
178ConfigDefault::ConfigDefault(std::string_view name,
const T& value)
180 default_json(impl::ToJsonString(value))
183template <
typename Variable>
184Key<Variable>::
Key(std::string_view name,
const VariableType& default_value)
185 : id_(impl::Register(
187 [name = std::string{name}](
const auto& docs_map) -> std::any {
188 return impl::DocsMapGet(docs_map, name).
template As<VariableType>();
190 impl::ValueToDocsMapString(name, default_value)
194template <
typename Variable>
195Key<Variable>::
Key(std::string_view name, DefaultAsJsonString default_json)
196 : id_(impl::Register(
198 [name = std::string{name}](
const auto& docs_map) -> std::any {
199 return impl::DocsMapGet(docs_map, name).
template As<VariableType>();
201 impl::SingleToDocsMapString(name, default_json.json_string)
205template <
typename Variable>
206Key<Variable>::
Key(std::string_view name, JsonParser parser, DefaultAsJsonString default_json)
207 : id_(impl::Register(
209 [name = std::string{name}, parser](
const auto& docs_map) -> std::any {
210 return parser(impl::DocsMapGet(docs_map, name));
212 impl::SingleToDocsMapString(name, default_json.json_string)
216template <
typename Variable>
217template <std::size_t N>
218Key<Variable>::
Key(DocsMapParser parser,
const ConfigDefault (&default_json_map)[N])
219 : id_(impl::Register(
221 [parser](
const DocsMap& docs_map) -> std::any {
return parser(docs_map); },
222 impl::MultipleToDocsMapString(default_json_map, N)
226template <
typename Variable>
227Key<Variable>::
Key(ConstantConfig , VariableType value)
228 : id_(impl::Register(std::string{}, [value = std::move(value)](
const DocsMap& ) {
return value; },
"{}"))
231template <
typename Variable>
232Key<Variable>::Key(impl::InternalTag, std::string_view name)
233 : id_(impl::Register(
235 [name = std::string{name}](
const auto& docs_map) -> std::any {
236 return impl::DocsMapGet(docs_map, name).
template As<VariableType>();
242template <
typename Variable>
243Key<Variable>::Key(impl::InternalTag, DocsMapParser parser)
244 : id_(impl::Register(
246 [parser](
const DocsMap& docs_map) -> std::any {
return parser(docs_map); },
251template <
typename VariableType>
252std::string_view Key<VariableType>::
GetName()
const noexcept {
253 return impl::GetName(id_);
256template <
typename VariableType>
257VariableType Key<VariableType>::
Parse(
const DocsMap& docs_map)
const {
258 return std::any_cast<VariableType>(impl::MakeConfig(id_, docs_map));