use std::env; use std::fs; use protobuf::text_format; use protobuf_parse2::Parser; enum Which { Protoc, Pure, } fn main() { let args = env::args().skip(1).collect::>(); let args = args.iter().map(|s| s.as_str()).collect::>(); let (path, out_protoc, out_pure) = match args.as_slice() { // Just invoke protoc. [path, out_protoc, out_pure] => (path, out_protoc, out_pure), _ => panic!("wrong args"), }; for which in [Which::Pure, Which::Protoc] { let mut parser = Parser::new(); match which { Which::Protoc => { parser.protoc(); } Which::Pure => { parser.pure(); } } parser.input(path); parser.include("."); let fds = parser.file_descriptor_set().unwrap(); let fds = text_format::print_to_string_pretty(&fds); let out = match which { Which::Protoc => out_protoc, Which::Pure => out_pure, }; fs::write(out, fds).unwrap(); } }