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

#[fasync::run_singlethreaded]
async fn main() -> Result<(), Error> {
    let launcher = launcher().context("Failed to open launcher service")?;
    let app = launch(
        &launcher,
        "fuchsia-pkg://fuchsia.com/echo-integration-test#meta/echo-server.cmx".to_string(),
        None,
    )
    .context("Failed to launch echo service")?;

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

    let res = echo.echo_string(Some("Hello world!")).await?;
    match res.as_ref().map(String::as_str) {
        Some("Hello world!") => Ok(()),
        Some(unexpected) => Err(format_err!("Got {}", unexpected)),
        None => Err(format_err!("Got none")),
    }
}
