1pub mod intl_controller;
6pub mod intl_fidl_handler;
7pub mod types;
8
9use self::intl_controller::IntlController;
10use self::intl_fidl_handler::IntlFidlHandler;
11use settings_common::inspect::event::{SettingValuePublisher, UsagePublisher};
12use settings_storage::device_storage::DeviceStorage;
13use settings_storage::storage_factory::StorageFactory;
14use std::rc::Rc;
15use types::IntlInfo;
16
17pub struct SetupResult {
18 pub intl_fidl_handler: IntlFidlHandler,
19 pub task: fuchsia_async::Task<()>,
20}
21
22pub async fn setup_intl_api<F>(
23 storage_factory: Rc<F>,
24 setting_value_publisher: SettingValuePublisher<IntlInfo>,
25 usage_publisher: UsagePublisher<IntlInfo>,
26) -> SetupResult
27where
28 F: StorageFactory<Storage = DeviceStorage>,
29{
30 let mut intl_controller =
31 IntlController::new(storage_factory, setting_value_publisher.clone()).await;
32 let initial_value = intl_controller.restore().await;
33 let _ = setting_value_publisher.publish(&initial_value);
34
35 let (intl_fidl_handler, request_rx) =
36 IntlFidlHandler::new(&mut intl_controller, usage_publisher, initial_value);
37 let task = intl_controller.handle(request_rx).await;
38 SetupResult { intl_fidl_handler, task }
39}