extern crate utf_railroad;
use utf_railroad::{Diagram, Terminal, NonTerminal, Optional, Repeat, Sequence};
fn main() {
let diagram = Diagram::default()
.push(Box::new(Terminal::new("CREATE")))
.push(Box::new(Terminal::new("VIRTUAL")))
.push(Box::new(Terminal::new("TABLE")))
.push(Box::new(
Optional::new(Box::new(
Sequence::default()
.push(Box::new(Terminal::new("IF")))
.push(Box::new(Terminal::new("NOT")))
.push(Box::new(Terminal::new("EXISTS")))
))
))
.next_row()
.push(Box::new(
Optional::new(Box::new(
Sequence::default()
.push(Box::new(NonTerminal::new("schema-name")))
.push(Box::new(Terminal::new(".")))
))
))
.push(Box::new(NonTerminal::new("table-name")))
.next_row()
.push(Box::new(Terminal::new("USING")))
.push(Box::new(NonTerminal::new("module-name")))
.push(Box::new(
Optional::new(Box::new(
Sequence::default()
.push(Box::new(Terminal::new("(")))
.push(Box::new(
Repeat::new(Box::new(
NonTerminal::new("module-argument")
))
))
.push(Box::new(Terminal::new(")")))
))
));
println!("{}", diagram);
}