use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::fmt;
mod inconsistencies;
mod inspect;
mod merge;
mod ops;
mod parse;
mod serialization;
mod slice;
mod xml;
#[derive(Clone, Serialize, Deserialize, Eq, PartialOrd, PartialEq, Ord)]
struct Edge {
to: u32,
a: String,
}
impl Edge {
fn new(to: u32, a: String) -> Edge {
Edge { to, a }
}
}
#[derive(Clone, Serialize, Deserialize)]
struct Vertex {
edges: Vec<Edge>,
data: Vec<u8>,
}
impl Vertex {
pub fn empty() -> Self {
Vertex {
edges: vec![],
data: vec![],
}
}
}
#[derive(Serialize, Deserialize)]
pub struct Sot {
vertices: HashMap<u32, Vertex>,
}
impl fmt::Debug for Sot {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let mut lines = vec![];
for (i, v) in self.vertices.iter() {
let mut attrs = v
.edges
.iter()
.map(|e| format!("\n\t{} ➞ ν{}", e.a, e.to))
.collect::<Vec<String>>();
if !&v.data.is_empty() {
attrs.push(format!("{}b", v.data.len()));
}
lines.push(format!("ν{} -> ⟦{}⟧", i, attrs.join(", ")));
}
f.write_str(lines.join("\n").as_str())
}
}
impl Sot {
pub fn empty() -> Self {
Sot {
vertices: HashMap::new(),
}
}
pub fn max(&self) -> u32 {
let mut id = 0;
for v in self.vertices.keys() {
if *v > id {
id = *v;
}
}
id
}
}
#[cfg(test)]
use anyhow::Result;
#[test]
fn makes_an_empty_sot() -> Result<()> {
let mut sot = Sot::empty();
sot.add(0)?;
assert_eq!(1, sot.vertices.len());
Ok(())
}
#[test]
fn calculates_max() -> Result<()> {
let mut sot = Sot::empty();
sot.add(0)?;
sot.add(1)?;
assert_eq!(1, sot.max());
Ok(())
}