blob: 3418f227fd6edc573a7d7563847375414615f0ee [file] [log] [blame]
// Copyright 2021 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 {
fasync::TimeoutExt,
fidl_fidl_examples_routing_echo as fecho, fuchsia_async as fasync,
fuchsia_component::server::ServiceFs,
futures::{StreamExt, TryStreamExt},
rand::{thread_rng, Rng},
std::time::Duration,
};
#[fasync::run_singlethreaded]
pub async fn main() {
let mut rng = thread_rng();
let timeout = rng.gen_range(0, 10);
let timeout = Duration::from_secs(timeout);
run_echo_service().on_timeout(timeout, || ()).await;
}
async fn run_echo_service() {
let mut fs = ServiceFs::new_local();
fs.dir("svc").add_fidl_service(move |mut stream: fecho::EchoRequestStream| {
fasync::Task::local(async move {
while let Ok(Some(fecho::EchoRequest::EchoString { value, responder })) =
stream.try_next().await
{
let _ = responder.send(value.as_ref().map(|s| &**s));
}
})
.detach();
});
fs.take_and_serve_directory_handle().expect("failed to serve outgoing directory");
fs.collect::<()>().await;
}