routing/bedrock/
request_metadata.rs1use crate::rights::Rights;
6use crate::subdir::SubDir;
7use cm_rust::{CapabilityTypeName, EventScope, NativeIntoFidl};
8use fidl_fuchsia_component_runtime::RouteRequest;
9use fidl_fuchsia_io as fio;
10use moniker::Moniker;
11
12pub fn protocol_metadata(availability: cm_types::Availability) -> RouteRequest {
14 RouteRequest {
15 build_type_name: Some(CapabilityTypeName::Protocol.to_string()),
16 availability: Some(availability.native_into_fidl()),
17 ..Default::default()
18 }
19}
20
21pub fn dictionary_metadata(availability: cm_types::Availability) -> RouteRequest {
23 RouteRequest {
24 build_type_name: Some(CapabilityTypeName::Dictionary.to_string()),
25 availability: Some(availability.native_into_fidl()),
26 ..Default::default()
27 }
28}
29
30pub fn directory_metadata(
32 availability: cm_types::Availability,
33 rights: Option<Rights>,
34 subdir: Option<SubDir>,
35) -> RouteRequest {
36 RouteRequest {
37 build_type_name: Some(CapabilityTypeName::Directory.to_string()),
38 availability: Some(availability.native_into_fidl()),
39 sub_directory_path: subdir.map(|sd| sd.as_ref().clone().native_into_fidl()),
40 directory_rights: rights.map(Into::into),
41 inherit_rights: Some(rights.is_none()),
42 ..Default::default()
43 }
44}
45
46pub fn config_metadata(availability: cm_types::Availability) -> RouteRequest {
48 RouteRequest {
49 build_type_name: Some(CapabilityTypeName::Config.to_string()),
50 availability: Some(availability.native_into_fidl()),
51 ..Default::default()
52 }
53}
54
55pub fn runner_metadata(availability: cm_types::Availability) -> RouteRequest {
57 RouteRequest {
58 build_type_name: Some(CapabilityTypeName::Runner.to_string()),
59 availability: Some(availability.native_into_fidl()),
60 ..Default::default()
61 }
62}
63
64pub fn resolver_metadata(availability: cm_types::Availability) -> RouteRequest {
66 RouteRequest {
67 build_type_name: Some(CapabilityTypeName::Resolver.to_string()),
68 availability: Some(availability.native_into_fidl()),
69 ..Default::default()
70 }
71}
72
73pub fn service_metadata(availability: cm_types::Availability) -> RouteRequest {
75 RouteRequest {
76 build_type_name: Some(CapabilityTypeName::Service.to_string()),
77 availability: Some(availability.native_into_fidl()),
78 directory_rights: Some(fio::PERM_READABLE),
89 inherit_rights: Some(true),
90 ..Default::default()
91 }
92}
93
94pub fn event_stream_metadata(
96 availability: cm_types::Availability,
97 route_metadata: Option<(Moniker, Box<[EventScope]>)>,
98) -> RouteRequest {
99 let (scope_moniker, scope) = match route_metadata {
100 Some((moniker, scope)) => (Some(moniker), Some(scope)),
101 None => (None, None),
102 };
103 RouteRequest {
104 build_type_name: Some(CapabilityTypeName::EventStream.to_string()),
105 availability: Some(availability.native_into_fidl()),
106 event_stream_scope_moniker: scope_moniker.map(NativeIntoFidl::native_into_fidl),
107 event_stream_scope: scope.map(NativeIntoFidl::native_into_fidl),
108 ..Default::default()
109 }
110}
111
112pub fn storage_metadata(availability: cm_types::Availability) -> RouteRequest {
114 RouteRequest {
115 build_type_name: Some(CapabilityTypeName::Storage.to_string()),
116 availability: Some(availability.native_into_fidl()),
117 directory_rights: Some(fio::PERM_READABLE | fio::PERM_WRITABLE),
118 inherit_rights: Some(false),
119 ..Default::default()
120 }
121}