blob: c2a18d84ebd9d526bda62802bf94e99b5cc169b3 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#![feature(async_await, await_macro, futures_api)]
mod opts;
use {
crate::opts::*,
failure::{Error, ResultExt},
fidl_fuchsia_net_policy::{ObserverMarker, ObserverProxy},
fidl_fuchsia_net_policy_ext::InterfaceInfo,
fuchsia_async as fasync, fuchsia_zircon as zx,
structopt::StructOpt,
};
fn main() -> Result<(), Error> {
let opt = Opt::from_args();
let mut exec = fasync::Executor::new().context("error creating executor")?;
let observer_proxy = fuchsia_app::client::connect_to_service::<ObserverMarker>()
.context("Failed to connect to Observer service")?;
let fut = async {
match opt {
Opt::If(cmd) => await!(process_observer(cmd, observer_proxy)),
}
};
exec.run_singlethreaded(fut)?;
Ok(())
}
async fn process_observer(cmd: ObserverCmd, observer_proxy: ObserverProxy) -> Result<(), Error> {
match cmd {
ObserverCmd::List => {
let (infos, status) =
await!(observer_proxy.list_interfaces()).context("error getting response")?;
match zx::Status::ok(status) {
Ok(()) => {
for info in infos.unwrap() {
println!("{}", InterfaceInfo::from(info));
}
}
Err(e) => println!("error listing interfaces:{}", e),
}
}
ObserverCmd::Get { name } => {
let (info, status) = await!(observer_proxy.get_interface_info(&name))
.with_context(|_| format!("error getting response"))?;
match zx::Status::ok(status) {
Ok(()) => println!("{}", InterfaceInfo::from(*info.unwrap())),
Err(e) => println!("error querying interface {}:{}", name, e),
}
}
}
Ok(())
}