Remove duplicate vertices
This commit is contained in:
parent
8d1bf2dfb0
commit
235e32d29a
21
src/main.rs
21
src/main.rs
@ -2,6 +2,7 @@ use clap::{Parser, Subcommand};
|
||||
use openapi_parser::{
|
||||
build_tree, parse_schema, parse_schema_fix_example_issue, NodeType, ObjectChild, TreeNode,
|
||||
};
|
||||
use std::collections::HashSet;
|
||||
use std::fmt::Write;
|
||||
|
||||
/// Dump the tree structure of a schema element as dot file
|
||||
@ -78,7 +79,17 @@ fn main() {
|
||||
}
|
||||
}
|
||||
|
||||
fn recurse_export(node: &TreeNode, parent_name: &str, out: &mut String) {
|
||||
fn recurse_export(
|
||||
node: &TreeNode,
|
||||
parent_name: &str,
|
||||
out: &mut String,
|
||||
already_processed: &mut HashSet<String>,
|
||||
) {
|
||||
if already_processed.contains(&node.name) {
|
||||
return;
|
||||
}
|
||||
already_processed.insert(node.name.to_string());
|
||||
|
||||
if !parent_name.is_empty() && matches!(node.r#type, NodeType::Object { .. }) {
|
||||
writeln!(out, "\"{}\" -> \"{}\";", parent_name, node.name).unwrap();
|
||||
}
|
||||
@ -87,11 +98,11 @@ fn recurse_export(node: &TreeNode, parent_name: &str, out: &mut String) {
|
||||
NodeType::Array { item } => {
|
||||
let mut item = item.clone();
|
||||
item.name.push_str(" []");
|
||||
recurse_export(&item, parent_name, out);
|
||||
recurse_export(&item, parent_name, out, already_processed);
|
||||
}
|
||||
NodeType::Object { children, .. } => {
|
||||
for child in children {
|
||||
recurse_export(&child.node, &node.name, out);
|
||||
recurse_export(&child.node, &node.name, out, already_processed);
|
||||
}
|
||||
}
|
||||
|
||||
@ -102,7 +113,9 @@ fn recurse_export(node: &TreeNode, parent_name: &str, out: &mut String) {
|
||||
fn graphviz_export(tree: &TreeNode) -> String {
|
||||
let mut out = "digraph G {\n".to_string();
|
||||
|
||||
recurse_export(tree, "", &mut out);
|
||||
let mut already_processed = HashSet::new();
|
||||
|
||||
recurse_export(tree, "", &mut out, &mut already_processed);
|
||||
|
||||
out.push_str("}\n");
|
||||
out
|
||||
|
Loading…
Reference in New Issue
Block a user