0.5.4
C++ to UML diagram generator based on Clang
Loading...
Searching...
No Matches
Classes | Functions
YAML Namespace Reference

Classes

struct  convert< access_t >
 
struct  convert< callee_type >
 
struct  convert< class_diagram >
 
struct  convert< config >
 
struct  convert< context_config >
 
struct  convert< context_direction_t >
 
struct  convert< diagram_template >
 
struct  convert< filter >
 
struct  convert< generate_links_config >
 
struct  convert< git_config >
 
struct  convert< include_diagram >
 
struct  convert< layout_hint >
 
struct  convert< mermaid >
 
struct  convert< method_type >
 
struct  convert< module_access_t >
 
struct  convert< namespace_or_regex >
 
struct  convert< package_diagram >
 
struct  convert< plantuml >
 
struct  convert< relationship_hint_t >
 
struct  convert< relationship_t >
 
struct  convert< sequence_diagram >
 
struct  convert< std::filesystem::path >
 
struct  convert< std::vector< source_location > >
 
struct  convert< string_or_regex >
 

Functions

bool has_key (const YAML::Node &n, const std::string &key)
 
template<typename T >
void get_option (const Node &node, clanguml::config::option< T > &option)
 
template<>
void get_option< clanguml::common::model::namespace_ > (const Node &node, clanguml::config::option< clanguml::common::model::namespace_ > &option)
 
template<>
void get_option< method_arguments > (const Node &node, clanguml::config::option< method_arguments > &option)
 
template<>
void get_option< member_order_t > (const Node &node, clanguml::config::option< member_order_t > &option)
 
template<>
void get_option< package_type_t > (const Node &node, clanguml::config::option< package_type_t > &option)
 
template<>
void get_option< clanguml::config::comment_parser_t > (const Node &node, clanguml::config::option< clanguml::config::comment_parser_t > &option)
 
template<>
void get_option< clanguml::config::filter_mode_t > (const Node &node, clanguml::config::option< clanguml::config::filter_mode_t > &option)
 
template<>
void get_option< std::map< std::string, clanguml::config::diagram_template > > (const Node &node, clanguml::config::option< std::map< std::string, clanguml::config::diagram_template > > &option)
 
std::shared_ptr< clanguml::config::diagramparse_diagram_config (const Node &d)
 
template<typename T >
bool decode_diagram (const Node &node, T &rhs)
 

Function Documentation

◆ decode_diagram()

template<typename T >
bool YAML::decode_diagram ( const Node &  node,
T &  rhs 
)

Definition at line 659 of file yaml_decoders.cc.

660{
661 // Decode options common for all diagrams
662 get_option(node, rhs.glob);
663 get_option(node, rhs.using_namespace);
664 get_option(node, rhs.using_module);
665 get_option(node, rhs.filter_mode);
666 get_option(node, rhs.include_system_headers);
667 get_option(node, rhs.include);
668 get_option(node, rhs.exclude);
669 get_option(node, rhs.puml);
670 get_option(node, rhs.mermaid);
671 get_option(node, rhs.git);
672 get_option(node, rhs.generate_links);
673 get_option(node, rhs.type_aliases);
674 get_option(node, rhs.comment_parser);
675 get_option(node, rhs.debug_mode);
676 get_option(node, rhs.generate_metadata);
677 get_option(node, rhs.title);
678 get_option(node, rhs.get_relative_to());
679
680 return true;
681}

◆ get_option()

template<typename T >
void YAML::get_option ( const Node &  node,
clanguml::config::option< T > &  option 
)

Definition at line 68 of file yaml_decoders.cc.

69{
70 if (node[option.name])
71 option.set(node[option.name].template as<T>());
72
73 for (const auto &alt_name : option.alternate_names)
74 if (node[alt_name]) {
75 option.set(node[alt_name].template as<T>());
76 break;
77 }
78}

◆ get_option< clanguml::common::model::namespace_ >()

Definition at line 81 of file yaml_decoders.cc.

83{
84 if (node[option.name]) {
85 if (node[option.name].Type() == NodeType::Scalar)
86 option.set({node[option.name].template as<std::string>()});
87 else if (node[option.name].Type() == NodeType::Sequence)
88 option.set(
89 {node[option.name].template as<std::vector<std::string>>()[0]});
90 else
91 throw std::runtime_error("Invalid using_namespace value");
92 }
93}

◆ get_option< clanguml::config::comment_parser_t >()

Definition at line 147 of file yaml_decoders.cc.

149{
150 if (node[option.name]) {
151 const auto &val = node[option.name].as<std::string>();
152 if (val == "plain")
154 else if (val == "clang")
156 else
157 throw std::runtime_error("Invalid comment_parser value: " + val);
158 }
159}

◆ get_option< clanguml::config::filter_mode_t >()

Definition at line 162 of file yaml_decoders.cc.

164{
165 if (node[option.name]) {
166 const auto &val = node[option.name].as<std::string>();
167 if (val == "basic")
169 else if (val == "advanced")
171 else
172 throw std::runtime_error("Invalid comment_parser value: " + val);
173 }
174}

◆ get_option< member_order_t >()

template<>
void YAML::get_option< member_order_t > ( const Node &  node,
clanguml::config::option< member_order_t > &  option 
)

Definition at line 114 of file yaml_decoders.cc.

116{
117 if (node[option.name]) {
118 const auto &val = node[option.name].as<std::string>();
119 if (val == "as_is")
120 option.set(member_order_t::as_is);
121 else if (val == "lexical")
122 option.set(member_order_t::lexical);
123 else
124 throw std::runtime_error("Invalid member_order value: " + val);
125 }
126}

◆ get_option< method_arguments >()

template<>
void YAML::get_option< method_arguments > ( const Node &  node,
clanguml::config::option< method_arguments > &  option 
)

Definition at line 96 of file yaml_decoders.cc.

98{
99 if (node[option.name]) {
100 const auto &val = node[option.name].as<std::string>();
101 if (val == "full")
102 option.set(method_arguments::full);
103 else if (val == "abbreviated")
104 option.set(method_arguments::abbreviated);
105 else if (val == "none")
106 option.set(method_arguments::none);
107 else
108 throw std::runtime_error(
109 "Invalid generate_method_arguments value: " + val);
110 }
111}

◆ get_option< package_type_t >()

template<>
void YAML::get_option< package_type_t > ( const Node &  node,
clanguml::config::option< package_type_t > &  option 
)

Definition at line 129 of file yaml_decoders.cc.

131{
132 if (node[option.name]) {
133 const auto &val = node[option.name].as<std::string>();
134 if (val == "namespace")
135 option.set(package_type_t::kNamespace);
136 else if (val == "directory")
137 option.set(package_type_t::kDirectory);
138 else if (val == "module")
139 option.set(package_type_t::kModule);
140 else
141 throw std::runtime_error(
142 "Invalid generate_method_arguments value: " + val);
143 }
144}

◆ get_option< std::map< std::string, clanguml::config::diagram_template > >()

template<>
void YAML::get_option< std::map< std::string, clanguml::config::diagram_template > > ( const Node &  node,
clanguml::config::option< std::map< std::string, clanguml::config::diagram_template > > &  option 
)

Definition at line 177 of file yaml_decoders.cc.

181{
182 if (!node[option.name]) {
183 return;
184 }
185
186 if (node[option.name].IsMap() && node[option.name]["include!"]) {
187 auto parent_path = node["__parent_path"].as<std::string>();
188
189 // Load templates from file
190 auto include_path = std::filesystem::path{parent_path};
191 include_path /= node[option.name]["include!"].as<std::string>();
192
193 YAML::Node included_node = YAML::LoadFile(include_path.string());
194
195 option.set(
196 included_node.as<
197 std::map<std::string, clanguml::config::diagram_template>>());
198 }
199 else
200 option.set(node[option.name]
201 .as<std::map<std::string,
203}

◆ has_key()

bool YAML::has_key ( const YAML::Node &  n,
const std::string &  key 
)
inline

Definition at line 58 of file yaml_decoders.cc.

59{
60 assert(n.Type() == NodeType::Map);
61
62 return std::count_if(n.begin(), n.end(), [&key](auto &&n) {
63 return n.first.template as<std::string>() == key;
64 }) > 0;
65}

◆ parse_diagram_config()

std::shared_ptr< clanguml::config::diagram > YAML::parse_diagram_config ( const Node &  d)

Definition at line 205 of file yaml_decoders.cc.

206{
207 const auto diagram_type = d["type"].as<std::string>();
208
209 if (diagram_type == "class") {
210 return std::make_shared<class_diagram>(d.as<class_diagram>());
211 }
212 if (diagram_type == "sequence") {
213 return std::make_shared<sequence_diagram>(d.as<sequence_diagram>());
214 }
215 if (diagram_type == "package") {
216 return std::make_shared<package_diagram>(d.as<package_diagram>());
217 }
218 if (diagram_type == "include") {
219 return std::make_shared<include_diagram>(d.as<include_diagram>());
220 }
221
222 LOG_ERROR("Diagrams of type {} are not supported... ", diagram_type);
223
224 return {};
225}