///|
fn main {
  let sample = "source request_body \"external input\"\n" +
    "boundary api_gateway \"trusted service boundary\"\n" +
    "sanitizer escape_html \"html output encoding\"\n" +
    "sink render_html \"html response renderer\"\n" +
    "edge request_body -> api_gateway \"ingress\"\n" +
    "edge api_gateway -> render_html \"response output\"\n" +
    "edge api_gateway -> escape_html \"encode\"\n" +
    "edge escape_html -> render_html \"safe render\"\n" +
    "deny request_body -> render_html severity=high \"raw input must not render directly\"\n" +
    "require request_body -> render_html through=escape_html severity=medium \"html output must be encoded\"\n" +
    "allow request_body -> api_gateway -> escape_html -> render_html \"encoded response path\""
  match @trustflow.parse_model(sample) {
    Ok(model) => {
      let findings = @trustflow.analyze(model)
      println("MoonTrustFlow policy evaluation")
      println(
        "nodes=\{model.nodes.length()}, edges=\{model.edges.length()}, policies=\{model.policies.length()}, findings=\{findings.length()}",
      )
      for finding in findings {
        println(@trustflow.format_finding(finding))
      }
    }
    Err(err) => println("model error: " + @trustflow.format_error(err))
  }
}