// 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::{Context as _, Error};
use fidl_fuchsia_examples::EchoServiceMarker;
use fuchsia_async as fasync;
use fuchsia_component::client::{launch, launcher};

static SERVER_URL: &str = "fuchsia-pkg://fuchsia.com/echo-rust-service-server#meta/echo-server.cmx";

#[fasync::run_singlethreaded]
async fn main() -> Result<(), Error> {
    let launcher = launcher().context("Failed to open launcher service")?;
    let app =
        launch(&launcher, SERVER_URL.to_string(), None).context("Failed to launch echo service")?;

    let echo = app
        .connect_to_unified_service::<EchoServiceMarker>()
        .context("Failed to connect to echo service")?;

    let regular = echo.regular_echo().context("failed to connect to regular_echo member")?;
    let regular_response = regular.echo_string("hello world!").await?;
    println!("regular response: {:?}", regular_response);

    let reversed = echo.reversed_echo().context("failed to connect to reversed_echo member")?;
    let reversed_response = reversed.echo_string("hello world!").await?;
    println!("reversed response: {:?}", reversed_response);

    Ok(())
}
