[rust][carnelian] carnelian to fuchsia-component
Change-Id: Ife2dd133305b27609ad948b799215d2f318f3ac8
diff --git a/garnet/public/rust/carnelian/BUILD.gn b/garnet/public/rust/carnelian/BUILD.gn
index d7bb14d..79164cf 100644
--- a/garnet/public/rust/carnelian/BUILD.gn
+++ b/garnet/public/rust/carnelian/BUILD.gn
@@ -14,8 +14,8 @@
"//garnet/examples/fidl/services:echo-rustc",
"//garnet/public/lib/fidl/rust/fidl",
"//garnet/public/rust/fdio",
- "//garnet/public/rust/fuchsia-app",
"//garnet/public/rust/fuchsia-async",
+ "//garnet/public/rust/fuchsia-component",
"//garnet/public/rust/fuchsia-scenic",
"//garnet/public/rust/fuchsia-syslog",
"//garnet/public/rust/fuchsia-zircon",
@@ -64,8 +64,8 @@
deps = [
"//garnet/public/lib/fidl/rust/fidl",
"//garnet/public/rust/carnelian",
- "//garnet/public/rust/fuchsia-app",
"//garnet/public/rust/fuchsia-async",
+ "//garnet/public/rust/fuchsia-component",
"//garnet/public/rust/fuchsia-scenic",
"//garnet/public/rust/fuchsia-zircon",
"//sdk/fidl/fuchsia.math:fuchsia.math-rustc",
diff --git a/garnet/public/rust/carnelian/examples/embedding.rs b/garnet/public/rust/carnelian/examples/embedding.rs
index 9fa5b6f..25a069c 100644
--- a/garnet/public/rust/carnelian/examples/embedding.rs
+++ b/garnet/public/rust/carnelian/examples/embedding.rs
@@ -10,7 +10,7 @@
use fidl_fuchsia_math::RectF;
use fidl_fuchsia_ui_app::ViewProviderMarker;
use fidl_fuchsia_ui_gfx::{BoundingBox, Vec3, ViewProperties};
-use fuchsia_app::client::{App as LaunchedApp, Launcher};
+use fuchsia_component::client::{App as LaunchedApp, launcher, launch};
use fuchsia_scenic::{
new_view_token_pair, EntityNode, Rectangle, SessionPtr, ShapeNode, ViewHolder,
};
@@ -41,7 +41,8 @@
_: ViewKey,
session: &SessionPtr,
) -> Result<ViewAssistantPtr, Error> {
- let app = Launcher::new()?.launch(
+ let app = launch(
+ &launcher()?,
"fuchsia-pkg://fuchsia.com/spinning_square_rs#meta/spinning_square_rs.cmx".to_string(),
None,
)?;
diff --git a/garnet/public/rust/carnelian/src/app.rs b/garnet/public/rust/carnelian/src/app.rs
index bf9985f3..e18ed3c 100644
--- a/garnet/public/rust/carnelian/src/app.rs
+++ b/garnet/public/rust/carnelian/src/app.rs
@@ -7,14 +7,15 @@
view::{ViewAssistantPtr, ViewController, ViewKey},
};
use failure::{bail, Error, ResultExt};
-use fidl::endpoints::{create_endpoints, create_proxy, RequestStream, ServiceMarker};
-use fidl_fuchsia_ui_app::{ViewProviderMarker, ViewProviderRequest, ViewProviderRequestStream};
+use fidl::endpoints::{create_endpoints, create_proxy};
+use fidl_fuchsia_ui_app::{ViewProviderRequest, ViewProviderRequestStream};
use fidl_fuchsia_ui_scenic::{ScenicMarker, ScenicProxy, SessionListenerRequest};
use fidl_fuchsia_ui_views::ViewToken;
-use fuchsia_app::{self as component, client::connect_to_service, server::FdioServer};
use fuchsia_async as fasync;
+use fuchsia_component::{self as component, client::connect_to_service};
use fuchsia_scenic::{Session, SessionPtr};
-use futures::{TryFutureExt, TryStreamExt};
+use fuchsia_zircon as zx;
+use futures::{Future, StreamExt, TryFutureExt, TryStreamExt};
use std::{
cell::RefCell,
collections::BTreeMap,
@@ -106,7 +107,7 @@
fut
})?;
- executor.run_singlethreaded(fut)?;
+ executor.run_singlethreaded(fut);
Ok(())
}
@@ -210,9 +211,9 @@
Ok(())
}
- fn spawn_view_provider_server(chan: fasync::Channel) {
+ fn spawn_view_provider_server(stream: ViewProviderRequestStream) {
fasync::spawn_local(
- ViewProviderRequestStream::from_channel(chan)
+ stream
.try_for_each(move |req| {
let ViewProviderRequest::CreateView { token, .. } = req;
let view_token = ViewToken { value: token };
@@ -226,30 +227,36 @@
)
}
- fn pass_connection_to_assistant(channel: fasync::Channel, service_name: &'static str) {
- App::with(|app| {
- app.assistant
- .as_mut()
- .unwrap()
- .handle_service_connection_request(service_name, channel)
- .unwrap_or_else(|e| eprintln!("error running {} server: {:?}", service_name, e));
- });
+ fn pass_connection_to_assistant(channel: zx::Channel, service_name: &'static str) {
+ match fasync::Channel::from_channel(channel) {
+ Ok(channel) => {
+ App::with(|app| {
+ app.assistant
+ .as_mut()
+ .unwrap()
+ .handle_service_connection_request(service_name, channel)
+ .unwrap_or_else(|e| eprintln!("error running {} server: {:?}", service_name, e));
+ });
+ },
+ Err(e) => eprintln!("error asyncifying channel: {:?}", e),
+ }
}
- fn start_services(app: &mut App) -> Result<FdioServer, Error> {
+ fn start_services(app: &mut App) -> Result<impl Future<Output = ()>, Error> {
let outgoing_services_names = app.assistant.as_ref().unwrap().outgoing_services_names();
- let services_server = component::server::ServicesServer::new();
- let mut services_server =
- services_server.add_service((ViewProviderMarker::NAME, move |channel| {
- Self::spawn_view_provider_server(channel);
- }));
+ let mut fs = component::server::ServiceFs::new();
+ let mut public = fs.dir("public");
+ public.add_fidl_service(Self::spawn_view_provider_server);
for name in outgoing_services_names {
- services_server = services_server.add_service((name, move |channel| {
+ public.add_service_at(name, move |channel| {
Self::pass_connection_to_assistant(channel, name);
- }));
+ None
+ });
}
- Ok(services_server.start()?)
+ fs.take_and_serve_directory_handle()?;
+
+ Ok(fs.collect())
}
}
diff --git a/garnet/public/rust/carnelian/src/lib.rs b/garnet/public/rust/carnelian/src/lib.rs
index f9f418e..916d05e 100644
--- a/garnet/public/rust/carnelian/src/lib.rs
+++ b/garnet/public/rust/carnelian/src/lib.rs
@@ -10,6 +10,7 @@
//! [Rust](https://www.rust-lang.org/).
#![deny(missing_docs)]
+#![feature(futures_api)]
mod app;
mod canvas;