1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- use std::env;
- use std::process::{Command, Stdio};
- use std::path::{Path,PathBuf};
- #[derive(Debug)]
- enum ProtobufError {
- IoError(::std::io::Error),
- Other
- }
- impl std::convert::From<::std::io::Error> for ProtobufError {
- fn from(e: ::std::io::Error) -> ProtobufError {
- ProtobufError::IoError(e)
- }
- }
- fn compile(prefix : &Path, files : &[&Path]) -> Result<(),ProtobufError>{
- let mut c = Command::new("protoc");
- c.arg("--rust_out").arg(env::var("OUT_DIR").unwrap())
- .arg("--proto_path").arg(prefix.to_str().unwrap());
- for f in files.iter() {
- c.arg(f.to_str().unwrap());
- }
- //c.stdout(Stdio::inherit());
- c.stderr(Stdio::inherit());
- let mut p = try!(c.spawn());
- let r = try!(p.wait());
- return match r.success() {
- true => Ok(()),
- false => Err(ProtobufError::Other),
- };
- }
- fn main() {
- let root = PathBuf::from(&env::var("CARGO_MANIFEST_DIR").unwrap());
- let proto = root.join("proto");
- compile(&proto, &[
- &proto.join("keyexchange.proto"),
- &proto.join("authentication.proto"),
- &proto.join("mercury.proto"),
- &proto.join("metadata.proto"),
- &proto.join("pubsub.proto"),
- &proto.join("spirc.proto"),
- ]).unwrap();
- }
|