blob: 21cc48f3b9b43780ac359b6b1b707466c23ed4fa [file]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use crate::handler::base::SettingHandlerResult;
use crate::handler::device_storage::DeviceStorageCompatible;
use crate::handler::setting_handler::persist::{
controller as data_controller, write, ClientProxy, WriteResult,
};
use crate::handler::setting_handler::{controller, ControllerError};
use crate::switchboard::base::{
ConfigurationInterfaceFlags, SettingRequest, SettingResponse, SetupInfo,
};
use async_trait::async_trait;
impl DeviceStorageCompatible for SetupInfo {
const KEY: &'static str = "setup_info";
fn default_value() -> Self {
SetupInfo { configuration_interfaces: ConfigurationInterfaceFlags::DEFAULT }
}
}
pub struct SetupController {
client: ClientProxy<SetupInfo>,
}
#[async_trait]
impl data_controller::Create<SetupInfo> for SetupController {
/// Creates the controller
async fn create(client: ClientProxy<SetupInfo>) -> Result<Self, ControllerError> {
Ok(Self { client: client })
}
}
#[async_trait]
impl controller::Handle for SetupController {
async fn handle(&self, request: SettingRequest) -> Option<SettingHandlerResult> {
match request {
SettingRequest::SetConfigurationInterfaces(interfaces) => {
let mut info = self.client.read().await;
info.configuration_interfaces = interfaces;
return Some(write(&self.client, info, true).await.into_handler_result());
}
SettingRequest::Get => {
return Some(Ok(Some(SettingResponse::Setup(self.client.read().await))));
}
_ => None,
}
}
}