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 {
193193 if (referenceDirKey == " config-dir" ) {
194194 return dirs.configDir ;
195195 }
196- else if (referenceDirKey == " cwd" ) {
196+ if (referenceDirKey == " cwd" ) {
197197 return dirs.cwd ;
198198 }
199- else if (referenceDirKey == " mrdocs-root" ) {
199+ if (referenceDirKey == " mrdocs-root" ) {
200200 return dirs.mrdocsRoot ;
201201 }
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;
205224 }
206225 return Unexpected (formatError (" unknown relative-to value: \" {}\" " , referenceDirKey));
207226 }
Original file line number Diff line number Diff line change @@ -361,6 +361,16 @@ def generate_public_settings_hpp(config):
361361 contents += f' std::forward<F>(f)({ escape_as_cpp_string (option ["name" ])} , { to_camel_case (option ["name" ])} );\n '
362362 contents += ' }\n \n '
363363
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+
364374 contents += '}; // struct PublicSettings\n \n '
365375
366376 # Functions to convert enums to strings
You can’t perform that action at this time.
0 commit comments