22#include "inja/inja.hpp"
26#include <miroir/miroir.hpp>
27#include <spdlog/spdlog.h>
28#include <yaml-cpp/yaml.h>
48 :
std::runtime_error(
"Invalid config schema")
53 std::vector<miroir::Error<YAML::Node>>
errors;
57 logging::logger_type_t logger_type);
157 std::map<common::model::relationship_t, std::pair<std::string, std::string>>
191 std::map<std::string, std::string>
style;
196 std::optional<std::string>
get_style(
const std::string &element_type)
const;
226 std::map<std::string, std::vector<std::string>>
notes;
359 std::vector<common::model::access_t>
access;
510std::string to_string(
hint_t t);
514 std::variant<std::string, std::vector<std::string>>
entity;
520 std::map< std::string, std::string>
link;
524 const std::string &path)
const
530 const std::string &path)
const
567 bool operator()(
const std::string &a,
const std::string &b)
const
569 if (a.size() == b.size())
572 return a.size() > b.size();
576 std::map<std::string, std::string, type_aliases_longer_first_comparator>;
637 "include_relations_also_as_members",
true};
648 "generate_concept_requirements",
true};
656 "generate_template_argument_dependencies",
true};
658 "skip_redundant_dependencies",
true};
672 "combine_free_functions_into_file_participants",
false};
676 "generate_condition_statements",
false};
719 const std::vector<std::string> &compilation_database_files)
const;
728 const std::filesystem::path &p)
const;
737 const std::optional<std::string> &maybe_module)
const;
740 const std::string &full_name)
const;
817 "compilation_database_dir",
"."};
828 "remove_compile_flags"};
842 "diagram_templates"};
845 std::map<std::string, std::shared_ptr<diagram>>
diagrams;
875config load(
const std::string &config_file,
bool inherit =
true,
876 std::optional<bool> paths_relative_to_pwd = {},
877 std::optional<bool> no_metadata = {},
bool validate =
true);
885YAML::Emitter &
operator<<(YAML::Emitter &out,
const config &c);
888 YAML::Emitter &out,
const inheritable_diagram_options &c);
890YAML::Emitter &
operator<<(YAML::Emitter &out,
const filter &f);
892YAML::Emitter &
operator<<(YAML::Emitter &out,
const plantuml &p);
894YAML::Emitter &
operator<<(YAML::Emitter &out,
const mermaid &p);
896YAML::Emitter &
operator<<(YAML::Emitter &out,
const graphml &p);
900YAML::Emitter &
operator<<(YAML::Emitter &out,
const generate_links_config &glc);
902YAML::Emitter &
operator<<(YAML::Emitter &out,
const git_config &gc);
904YAML::Emitter &
operator<<(YAML::Emitter &out,
const relationship_hint_t &rh);
910YAML::Emitter &
operator<<(YAML::Emitter &out,
const class_diagram &c);
912YAML::Emitter &
operator<<(YAML::Emitter &out,
const sequence_diagram &c);
914YAML::Emitter &
operator<<(YAML::Emitter &out,
const include_diagram &c);
916YAML::Emitter &
operator<<(YAML::Emitter &out,
const package_diagram &c);
918YAML::Emitter &
operator<<(YAML::Emitter &out,
const layout_hint &c);
920YAML::Emitter &
operator<<(YAML::Emitter &out,
const element_filter_t &ef);
922YAML::Emitter &
operator<<(YAML::Emitter &out,
const diagram_template &dt);
924YAML::Emitter &
operator<<(YAML::Emitter &out,
const inja::json &ef);
927YAML::Emitter &
operator<<(YAML::Emitter &out,
const std::filesystem::path &p);
930 YAML::Emitter &out,
const std::vector<std::filesystem::path> &p);
933YAML::Emitter &
operator<<(YAML::Emitter &out,
const source_location &sc);
935template <
typename T>
bool is_null(
const T & ) {
return false; }
937template <>
bool is_null(
const std::string &v);
939template <>
bool is_null(
const glob_t &v);
941template <>
bool is_null(
const plantuml &v);
943template <>
bool is_null(
const mermaid &v);
945template <>
bool is_null(
const graphml &v);
947template <>
bool is_null(
const inja::json &v);
953 out << YAML::Key << o.
name;
954 if constexpr (std::is_same_v<T, std::filesystem::path>)
955 out << YAML::Value << o.
value.string();
957 out << YAML::Value << o.
value;
965namespace common::model {
980 const YAML::Node &d);