1use fidl_fuchsia_driver_framework as fdf;
6use fidl_next::Responder;
7use fidl_next_fuchsia_hardware_powerdomain::{self as fpowerdomain, DomainServerHandler};
8use fuchsia_async as fasync;
9use fuchsia_component::server::{ServiceFs, ServiceObjTrait};
10use fuchsia_sync::Mutex;
11use std::sync::Arc;
12
13struct FakePowerDomainState {
14 enabled: bool,
15}
16
17pub struct FakePowerDomain {
18 state: Arc<Mutex<FakePowerDomainState>>,
19}
20
21impl FakePowerDomain {
22 pub fn new() -> Self {
23 Self { state: Arc::new(Mutex::new(FakePowerDomainState { enabled: false })) }
24 }
25
26 pub fn enabled(&self) -> bool {
27 self.state.lock().enabled
28 }
29
30 pub fn serve<O: ServiceObjTrait>(
31 &self,
32 service_fs: &mut ServiceFs<O>,
33 scope: fasync::ScopeHandle,
34 instance_name: &str,
35 ) -> fdf::Offer {
36 fdf_component::ServiceOffer::<fpowerdomain::Service>::new_next()
37 .add_default_named_next(
38 service_fs,
39 instance_name,
40 FakePowerDomainService { state: self.state.clone(), scope },
41 )
42 .build_zircon_offer_next()
43 }
44}
45
46struct FakePowerDomainService {
47 state: Arc<Mutex<FakePowerDomainState>>,
48 scope: fasync::ScopeHandle,
49}
50
51impl fpowerdomain::ServiceHandler for FakePowerDomainService {
52 fn domain(&self, server_end: fidl_next::ServerEnd<fpowerdomain::Domain>) {
53 server_end.spawn_on(FakePowerDomainServer { state: self.state.clone() }, &self.scope);
54 }
55}
56
57struct FakePowerDomainServer {
58 state: Arc<Mutex<FakePowerDomainState>>,
59}
60
61impl DomainServerHandler for FakePowerDomainServer {
62 async fn enable(&mut self, responder: Responder<fpowerdomain::domain::Enable>) {
63 self.state.lock().enabled = true;
64 let _ = responder.respond(()).await;
65 }
66
67 async fn disable(&mut self, responder: Responder<fpowerdomain::domain::Disable>) {
68 self.state.lock().enabled = false;
69 let _ = responder.respond(()).await;
70 }
71
72 async fn is_enabled(&mut self, responder: Responder<fpowerdomain::domain::IsEnabled>) {
73 let enabled = self.state.lock().enabled;
74 let _ = responder.respond(enabled).await;
75 }
76}