summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs45
-rw-r--r--src/map.rs4
-rw-r--r--src/parser.rs2
3 files changed, 47 insertions, 4 deletions
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..f4b3c33
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,45 @@
+use std::{
+ fs::{read, write},
+ path::PathBuf,
+ process::Command,
+};
+
+use clap::Parser;
+use tempfile::tempdir;
+
+use roadmap::from_yaml;
+
+fn main() -> anyhow::Result<()> {
+ let args = Args::parse();
+
+ let data = read(&args.filename)?;
+ let yaml = String::from_utf8(data)?;
+ let roadmap = from_yaml(&yaml)?;
+ let graph = roadmap.format_as_dot(args.label_width)?;
+
+ let tmp = tempdir()?;
+ let filename = tmp.path().join("dot");
+ write(&filename, graph)?;
+
+ let output = Command::new("dot").arg("-Tsvg").arg(filename).output()?;
+ if output.status.success() {
+ let dot = String::from_utf8(output.stdout)?;
+ println!("{}", dot);
+ } else {
+ let stderr = String::from_utf8_lossy(&output.stderr);
+ eprintln!("ERROR: dot failed:\n{stderr}");
+ std::process::exit(output.status.code().unwrap());
+ }
+
+ Ok(())
+}
+
+#[derive(Parser)]
+struct Args {
+ /// Width of labels in the graph in characters.
+ #[clap(short, long, default_value = "20")]
+ label_width: usize,
+
+ /// Input filename.
+ filename: PathBuf,
+}
diff --git a/src/map.rs b/src/map.rs
index 3fe1e12..00b680f 100644
--- a/src/map.rs
+++ b/src/map.rs
@@ -2,7 +2,6 @@ use std::collections::HashMap;
use textwrap::fill;
-pub use crate::from_yaml;
pub use crate::RoadmapError;
pub use crate::Status;
pub use crate::Step;
@@ -220,7 +219,8 @@ impl Roadmap {
#[cfg(test)]
mod tests {
- use super::{from_yaml, Roadmap, Status, Step};
+ use super::{Roadmap, Status, Step};
+ use crate::from_yaml;
#[test]
fn new_roadmap() {
diff --git a/src/parser.rs b/src/parser.rs
index 8c7a9c1..6b7d845 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -1,9 +1,7 @@
use std::collections::HashMap;
pub use crate::Roadmap;
-pub use crate::RoadmapError;
pub use crate::RoadmapResult;
-pub use crate::Status;
pub use crate::Step;
/// Create a new roadmap from a textual YAML representation.