Skip to main content

settings_setup/
lib.rs

1// Copyright 2019 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4pub mod setup_controller;
5pub mod setup_fidl_handler;
6pub mod types;
7
8use self::setup_controller::SetupController;
9use self::setup_fidl_handler::SetupFidlHandler;
10use self::types::SetupInfo;
11use settings_common::inspect::event::{
12    ExternalEventPublisher, SettingValuePublisher, UsagePublisher,
13};
14use settings_common::service_context::ServiceContext;
15use settings_storage::device_storage::DeviceStorage;
16use settings_storage::storage_factory::StorageFactory;
17use std::rc::Rc;
18
19pub struct SetupResult {
20    pub setup_fidl_handler: SetupFidlHandler,
21    pub task: fuchsia_async::Task<()>,
22}
23
24pub async fn setup_setup_api<F>(
25    service_context: Rc<ServiceContext>,
26    storage_factory: Rc<F>,
27    setting_value_publisher: SettingValuePublisher<SetupInfo>,
28    usage_publisher: UsagePublisher<SetupInfo>,
29    external_publisher: ExternalEventPublisher,
30) -> SetupResult
31where
32    F: StorageFactory<Storage = DeviceStorage>,
33{
34    let mut setup_controller = SetupController::new(
35        service_context,
36        storage_factory,
37        setting_value_publisher.clone(),
38        external_publisher,
39    )
40    .await;
41    let initial_value = setup_controller.restore().await;
42    let _ = setting_value_publisher.publish(&initial_value);
43
44    let (setup_fidl_handler, request_rx) =
45        SetupFidlHandler::new(&mut setup_controller, usage_publisher, initial_value);
46    let task = setup_controller.handle(request_rx).await;
47    SetupResult { setup_fidl_handler, task }
48}