driver_manager_types/
node_types.rs1use fidl_fuchsia_component_sandbox::DirConnector;
6use std::cell::RefCell;
7use std::fmt;
8use std::rc::Rc;
9use {fidl_fuchsia_component_decl as fdecl, fidl_fuchsia_driver_framework as fdf};
10
11#[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Debug)]
12#[repr(u8)]
13pub enum Collection {
14 None,
15 Boot,
16 Package,
17 FullPackage,
18}
19
20impl fmt::Display for Collection {
21 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
22 write!(
23 f,
24 "{}",
25 match self {
26 Collection::None => "none",
27 Collection::Boot => "boot-drivers",
28 Collection::Package => "base-drivers",
29 Collection::FullPackage => "full-drivers",
30 },
31 )
32 }
33}
34
35#[derive(PartialEq, Eq, Debug)]
36pub enum NodeType {
37 Normal,
38 Composite,
39}
40
41#[derive(PartialEq, Eq, Clone, Copy, Debug)]
42pub enum ShutdownState {
43 Running,
44 Prestop,
45 WaitingOnDriverBind,
46 WaitingOnChildren,
47 WaitingOnDriver,
48 WaitingOnDriverComponent,
49 Stopped,
50 WaitingOnDestroy,
51 Destroyed,
52}
53
54impl fmt::Display for ShutdownState {
55 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
56 write!(
57 f,
58 "{}",
59 match self {
60 ShutdownState::WaitingOnDriverBind => "waiting for driver to finish binding",
61 ShutdownState::Running => "in normal running state",
62 ShutdownState::Prestop => "in running state, but flagged for removal soon.",
63 ShutdownState::WaitingOnChildren => "waiting for children to complete shutdown",
64 ShutdownState::WaitingOnDriver => {
67 "waiting for driver's Stop() function and destructor finish running"
68 }
69 ShutdownState::WaitingOnDriverComponent =>
70 "waiting for the driver component to stop",
71 ShutdownState::Stopped => "node component instance stop is completed",
72 ShutdownState::WaitingOnDestroy => "waiting for the component to be destroyed.",
73 ShutdownState::Destroyed => "node shutdown is completed",
74 },
75 )
76 }
77}
78
79#[derive(Clone, Debug)]
80pub enum OfferTransport {
81 DriverTransport,
82 ZirconTransport,
83 Dictionary,
84}
85
86#[derive(Clone, Debug)]
87pub struct NodeOffer {
88 pub source_name: String,
89 pub source_collection: Collection,
90 pub transport: OfferTransport,
91 pub service_name: String,
92 pub source_instance_filter: Vec<String>,
93 pub renamed_instances: Vec<fdecl::NameMapping>,
94 pub dir_connector: Rc<RefCell<Option<DirConnector>>>,
95}
96
97impl From<&NodeOffer> for fdf::Offer {
98 fn from(offer: &NodeOffer) -> Self {
99 let service_offer = fdecl::OfferService {
100 source: Some(fdecl::Ref::Child(fdecl::ChildRef {
101 name: offer.source_name.clone(),
102 collection: Some(offer.source_collection.to_string()),
103 })),
104 source_name: Some(offer.service_name.clone()),
105 target_name: Some(offer.service_name.clone()),
106 source_instance_filter: Some(offer.source_instance_filter.clone()),
107 renamed_instances: Some(offer.renamed_instances.clone()),
108 ..Default::default()
109 };
110 let inner_offer = fdecl::Offer::Service(service_offer);
111 match offer.transport {
112 crate::node_types::OfferTransport::ZirconTransport => {
113 fdf::Offer::ZirconTransport(inner_offer)
114 }
115 crate::node_types::OfferTransport::DriverTransport => {
116 fdf::Offer::DriverTransport(inner_offer)
117 }
118 crate::node_types::OfferTransport::Dictionary => {
119 fdf::Offer::DictionaryOffer(inner_offer)
120 }
121 }
122 }
123}