1pub mod error;
2pub mod parser;
3pub mod problem;
4pub mod solution;
5pub mod solve;
6
7pub mod combine;
8pub use combine::*;
9
10#[macro_use]
11extern crate lalrpop_util;
12
13pub fn ok_entry<S: Into<String>>(title: S) -> d_stuff::Entry {
14 let title = d_stuff::Text::new(
15 title,
16 termion::style::Bold.to_string(),
17 termion::color::Blue.fg_str(),
18 );
19 let message = d_stuff::Text::new(
20 "OK",
21 termion::style::Reset.to_string(),
22 termion::color::Green.fg_str(),
23 );
24 d_stuff::Entry::new(d_stuff::Status::Success, title, Some(message), vec![])
25}
26
27pub fn load_file(
28 pretty: &mut d_stuff::Pretty,
29 problem: &mut problem::Problem,
30 filename: &str,
31 verbose: u8,
32) -> Result<(), error::Error> {
33 match parser::parse_file(problem, filename) {
35 Ok(_) => {
36 if verbose >= 2 {
37 pretty.add(ok_entry("Parse "));
38 pretty.print();
39 }
40 }
41 Err(e) => return Err(e),
42 }
43 match problem.resolve_type() {
45 Ok(_) => {
46 if verbose >= 2 {
47 pretty.add(ok_entry("Resolve T"));
48 pretty.print();
49 }
50 }
51 Err(e) => return Err(e),
52 }
53 match problem.check_cycle() {
55 Ok(_) => {
56 if verbose >= 2 {
57 pretty.add(ok_entry("Cycle "));
58 pretty.print();
59 }
60 }
61 Err(e) => return Err(e),
62 }
63 match problem.duplicate() {
65 Ok(_) => {
66 if verbose >= 2 {
67 pretty.add(ok_entry("Unicity "));
68 pretty.print();
69 }
70 }
71 Err(e) => return Err(e),
72 }
73 match problem.check_interval() {
75 Ok(_) => {
76 if verbose >= 2 {
77 pretty.add(ok_entry("Interval "));
78 pretty.print();
79 }
80 }
81 Err(e) => return Err(e),
82 }
83 match problem.check_bounded() {
85 Ok(_) => {
86 if verbose >= 2 {
87 pretty.add(ok_entry("Bounded "));
88 pretty.print();
89 }
90 }
91 Err(e) => return Err(e),
92 }
93 match problem.check_empty() {
97 Ok(_) => {
98 if verbose >= 2 {
99 pretty.add(ok_entry("Empty "));
100 pretty.print();
101 }
102 }
103 Err(e) => return Err(e),
104 }
105
106 match problem.resolve_expr() {
108 Ok(_) => {
109 if verbose >= 2 {
110 pretty.add(ok_entry("Resolve E"));
111 pretty.print();
112 }
113 }
114 Err(e) => return Err(e),
115 }
116 match problem.check_parameter_size() {
118 Ok(_) => {
119 if verbose >= 2 {
120 pretty.add(ok_entry("Parameter"));
121 pretty.print();
122 }
123 }
124 Err(e) => return Err(e),
125 }
126 match problem.check_type() {
128 Ok(_) => {
129 if verbose >= 2 {
130 pretty.add(ok_entry("Type "));
131 pretty.print();
132 }
133 }
134 Err(e) => return Err(e),
135 }
136
137 Ok(())
138}