Skip to main content

settings_intl/
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.
4
5pub 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}