File tree Expand file tree Collapse file tree 2 files changed +34
-5
lines changed Expand file tree Collapse file tree 2 files changed +34
-5
lines changed Original file line number Diff line number Diff line change @@ -193,15 +193,34 @@ struct PublicSettingsVisitor {
193
193
if (referenceDirKey == " config-dir" ) {
194
194
return dirs.configDir ;
195
195
}
196
- else if (referenceDirKey == " cwd" ) {
196
+ if (referenceDirKey == " cwd" ) {
197
197
return dirs.cwd ;
198
198
}
199
- else if (referenceDirKey == " mrdocs-root" ) {
199
+ if (referenceDirKey == " mrdocs-root" ) {
200
200
return dirs.mrdocsRoot ;
201
201
}
202
- else if (referenceDirKey == " output" ) {
203
- MRDOCS_ASSERT (!settings.output .empty ());
204
- return settings.output ;
202
+ if (!referenceDirKey.empty ()) {
203
+ Expected<std::string_view> res = Unexpected (formatError (" unknown relative-to value: \" {}\" " , referenceDirKey));
204
+ settings.visit ([&]<typename T>(std::string_view const name, T& value)
205
+ {
206
+ if constexpr (std::convertible_to<T, std::string_view>)
207
+ {
208
+ if (name != referenceDirKey)
209
+ {
210
+ return ;
211
+ }
212
+ std::string_view valueSv (value);
213
+ if (!value.empty ())
214
+ {
215
+ res = value;
216
+ return ;
217
+ }
218
+ res = Unexpected (formatError (
219
+ " relative-to value \" {}\" is empty" ,
220
+ referenceDirKey));
221
+ }
222
+ });
223
+ return res;
205
224
}
206
225
return Unexpected (formatError (" unknown relative-to value: \" {}\" " , referenceDirKey));
207
226
}
Original file line number Diff line number Diff line change @@ -361,6 +361,16 @@ def generate_public_settings_hpp(config):
361
361
contents += f' std::forward<F>(f)({ escape_as_cpp_string (option ["name" ])} , { to_camel_case (option ["name" ])} );\n '
362
362
contents += ' }\n \n '
363
363
364
+ contents += ' /** Visit all options\n '
365
+ contents += ' */\n '
366
+ contents += ' template <class F>\n '
367
+ contents += ' void\n '
368
+ contents += ' visit(F&& f) const\n '
369
+ contents += ' {\n '
370
+ for option in flat_options :
371
+ contents += f' std::forward<F>(f)({ escape_as_cpp_string (option ["name" ])} , { to_camel_case (option ["name" ])} );\n '
372
+ contents += ' }\n \n '
373
+
364
374
contents += '}; // struct PublicSettings\n \n '
365
375
366
376
# Functions to convert enums to strings
You can’t perform that action at this time.
0 commit comments