polka 0.1.2

A dot language parser for Rust; based on Parser Expression Grammar (PEG) using the excellent pest crate as the underpinning.
Documentation
use crate::dot::{Edge, EdgeOp, EdgeRhs, EdgeStatement, Graph, GraphType, NodeId, Statement};

pub fn basic_1() -> Graph {
  Graph {
    strict: false,
    id: None,
    graph_type: Some(GraphType::Graph),
    statements: vec![
      Statement::EdgeStatement(EdgeStatement {
        edge: Edge::NodeId(NodeId {
          node_id: "a".to_string(),
          port: None,
        }),
        edge_rhs_list: vec![EdgeRhs {
          edge_op: EdgeOp::Line,
          edge: Edge::NodeId(NodeId {
            node_id: "b".to_string(),
            port: None,
          }),
        }],
        attributes: None,
      }),
      Statement::EdgeStatement(EdgeStatement {
        edge: Edge::NodeId(NodeId {
          node_id: "b".to_string(),
          port: None,
        }),
        edge_rhs_list: vec![EdgeRhs {
          edge_op: EdgeOp::Line,
          edge: Edge::NodeId(NodeId {
            node_id: "c".to_string(),
            port: None,
          }),
        }],
        attributes: None,
      }),
      Statement::EdgeStatement(EdgeStatement {
        edge: Edge::NodeId(NodeId {
          node_id: "a".to_string(),
          port: None,
        }),
        edge_rhs_list: vec![EdgeRhs {
          edge_op: EdgeOp::Line,
          edge: Edge::NodeId(NodeId {
            node_id: "c".to_string(),
            port: None,
          }),
        }],
        attributes: None,
      }),
      Statement::EdgeStatement(EdgeStatement {
        edge: Edge::NodeId(NodeId {
          node_id: "d".to_string(),
          port: None,
        }),
        edge_rhs_list: vec![EdgeRhs {
          edge_op: EdgeOp::Line,
          edge: Edge::NodeId(NodeId {
            node_id: "c".to_string(),
            port: None,
          }),
        }],
        attributes: None,
      }),
      Statement::EdgeStatement(EdgeStatement {
        edge: Edge::NodeId(NodeId {
          node_id: "e".to_string(),
          port: None,
        }),
        edge_rhs_list: vec![EdgeRhs {
          edge_op: EdgeOp::Line,
          edge: Edge::NodeId(NodeId {
            node_id: "c".to_string(),
            port: None,
          }),
        }],
        attributes: None,
      }),
      Statement::EdgeStatement(EdgeStatement {
        edge: Edge::NodeId(NodeId {
          node_id: "e".to_string(),
          port: None,
        }),
        edge_rhs_list: vec![EdgeRhs {
          edge_op: EdgeOp::Line,
          edge: Edge::NodeId(NodeId {
            node_id: "a".to_string(),
            port: None,
          }),
        }],
        attributes: None,
      }),
    ],
  }
}

pub fn digraph() -> Graph {
  Graph {
    strict: false,
    id: None,
    graph_type: Some(GraphType::Digraph),
    statements: vec![
      Statement::EdgeStatement(EdgeStatement {
        edge: Edge::NodeId(NodeId {
          node_id: "a".to_string(),
          port: None,
        }),
        edge_rhs_list: vec![
          EdgeRhs {
            edge_op: EdgeOp::Arrow,
            edge: Edge::NodeId(NodeId {
              node_id: "b".to_string(),
              port: None,
            }),
          },
          EdgeRhs {
            edge_op: EdgeOp::Arrow,
            edge: Edge::NodeId(NodeId {
              node_id: "c".to_string(),
              port: None,
            }),
          },
        ],
        attributes: None,
      }),
      Statement::EdgeStatement(EdgeStatement {
        edge: Edge::NodeId(NodeId {
          node_id: "c".to_string(),
          port: None,
        }),
        edge_rhs_list: vec![EdgeRhs {
          edge_op: EdgeOp::Arrow,
          edge: Edge::NodeId(NodeId {
            node_id: "d".to_string(),
            port: None,
          }),
        }],
        attributes: None,
      }),
      Statement::EdgeStatement(EdgeStatement {
        edge: Edge::NodeId(NodeId {
          node_id: "d".to_string(),
          port: None,
        }),
        edge_rhs_list: vec![EdgeRhs {
          edge_op: EdgeOp::Arrow,
          edge: Edge::NodeId(NodeId {
            node_id: "a".to_string(),
            port: None,
          }),
        }],
        attributes: None,
      }),
    ],
  }
}