blob: a03073bce42c22a226e5a61e6ff4b8b593719e48 [file] [log] [blame]
// Copyright 2020 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.
use {
anyhow::Error, fuchsia_async as fasync, fuchsia_component::server::ServiceFs,
fuchsia_zircon::DurationNum, futures::StreamExt, inspect_codelab_shared::CodelabEnvironment,
lazy_static::lazy_static,
};
lazy_static! {
static ref CHILD_ENVIRONMENT_NAME: String = "codelab".to_string();
}
struct Args {
part: usize,
strings: Vec<String>,
}
impl Args {
fn load() -> Option<Self> {
let args = std::env::args().into_iter().skip(1).collect::<Vec<String>>();
if args.len() < 2 {
return None;
}
args[0].parse::<usize>().ok().map(|part| Args { part, strings: args[1..].to_vec() })
}
}
fn usage() -> String {
let arg0 = std::env::args().next().unwrap_or("inspect_rust_codelab_client".to_string());
format!(
"Usage: {:?} <option> <string> [string...]
option: The server to run. For example \"1\" for part_1
string: Strings provided on the command line to reverse",
arg0
)
}
#[fasync::run_singlethreaded]
async fn main() -> Result<(), Error> {
let args = Args::load().unwrap_or_else(|| {
println!("{}", usage());
std::process::exit(0);
});
let mut fs = ServiceFs::new();
let mut env = CodelabEnvironment::new(
fs.create_salted_nested_environment(&CHILD_ENVIRONMENT_NAME)?,
"inspect_rust_codelab",
args.part,
);
fasync::Task::spawn(fs.collect::<()>()).detach();
env.launch_fizzbuzz()?;
let reverser = env.launch_reverser()?;
// [START reverse_loop]
for string in args.strings {
println!("Input: {}", string);
match reverser.reverse(&string).await {
Ok(output) => println!("Output: {}", output),
Err(e) => println!("Failed to reverse string. Error: {:?}", e),
}
}
// [END reverse_loop]
println!("Done. Press Ctrl+C to exit");
loop {
1.seconds().sleep();
}
}