1pub 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}