Skip to main content

settings_factory_reset/
lib.rs

1// Copyright 2020 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 factory_reset_controller;
6pub mod types;
7
8mod factory_reset_fidl_handler;
9
10use self::factory_reset_controller::FactoryResetController;
11use self::factory_reset_fidl_handler::FactoryResetFidlHandler;
12use anyhow::{Context, Result};
13use settings_common::inspect::event::{
14    ExternalEventPublisher, SettingValuePublisher, UsagePublisher,
15};
16use settings_common::service_context::ServiceContext;
17use settings_storage::device_storage::DeviceStorage;
18use settings_storage::storage_factory::StorageFactory;
19use std::rc::Rc;
20use types::FactoryResetInfo;
21
22pub struct SetupResult {
23    pub factory_reset_fidl_handler: FactoryResetFidlHandler,
24    pub task: fuchsia_async::Task<()>,
25}
26
27pub async fn setup_factory_reset_api<F>(
28    service_context: &ServiceContext,
29    storage_factory: Rc<F>,
30    setting_value_publisher: SettingValuePublisher<FactoryResetInfo>,
31    usage_publisher: UsagePublisher<FactoryResetInfo>,
32    external_publisher: ExternalEventPublisher,
33) -> Result<SetupResult>
34where
35    F: StorageFactory<Storage = DeviceStorage>,
36{
37    let mut factory_reset_controller = FactoryResetController::new(
38        service_context,
39        storage_factory,
40        setting_value_publisher.clone(),
41        external_publisher,
42    )
43    .await
44    .context("building factory reset controller")?;
45    let initial_value = factory_reset_controller
46        .restore()
47        .await
48        .context("restoring factory reset initial value")?;
49    let _ = setting_value_publisher.publish(&initial_value);
50
51    let (factory_reset_fidl_handler, request_rx) =
52        FactoryResetFidlHandler::new(&mut factory_reset_controller, usage_publisher, initial_value);
53    let task = factory_reset_controller.handle(request_rx).await;
54    Ok(SetupResult { factory_reset_fidl_handler, task })
55}