reserialize_sise/
reserialize_sise.rs1#![deny(
2 rust_2018_idioms,
3 trivial_casts,
4 trivial_numeric_casts,
5 unreachable_pub,
6 unused_must_use,
7 unused_qualifications
8)]
9#![forbid(unsafe_code)]
10
11fn main() {
12 let args: Vec<_> = std::env::args_os().collect();
13 if args.len() != 3 {
14 eprintln!(
15 "Usage: {} [compact|spaced] [input-file]",
16 args[0].to_string_lossy()
17 );
18 std::process::exit(1);
19 }
20
21 enum SerializeStyle {
22 Compact,
23 Spaced,
24 }
25
26 let serialize_style = match &*args[1].to_string_lossy() {
27 "compact" => SerializeStyle::Compact,
28 "spaced" => SerializeStyle::Spaced,
29 _ => {
30 eprintln!("Unknown style {:?}.", args[1]);
31 std::process::exit(1);
32 }
33 };
34
35 let file_data = std::fs::read(&args[2]).unwrap();
36 let file_data = String::from_utf8(file_data).unwrap();
37 let mut parser = sise::Parser::new(&file_data);
38 let parsed = sise::parse_tree(&mut parser).unwrap();
39 parser.finish().unwrap();
40
41 let break_line_at = match serialize_style {
42 SerializeStyle::Compact => usize::MAX,
43 SerializeStyle::Spaced => 0,
44 };
45 let mut reserialized = String::new();
46 let mut serializer = sise::Serializer::new(
47 sise::SerializerStyle {
48 line_break: "\n",
49 indentation: " ",
50 },
51 &mut reserialized,
52 );
53 sise::serialize_tree(&mut serializer, &parsed, break_line_at);
54 serializer.finish(false);
55 println!("{}", reserialized);
56}