43 lines
1.1 KiB
Rust
43 lines
1.1 KiB
Rust
use std::env;
|
|
use std::fs;
|
|
|
|
use protobuf::text_format;
|
|
use protobuf_parse::Parser;
|
|
|
|
enum Which {
|
|
Protoc,
|
|
Pure,
|
|
}
|
|
|
|
fn main() {
|
|
let args = env::args().skip(1).collect::<Vec<_>>();
|
|
let args = args.iter().map(|s| s.as_str()).collect::<Vec<_>>();
|
|
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();
|
|
}
|
|
}
|