| {{/* |
| // 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. |
| */}} |
| |
| {{- define "ServiceDeclaration" }} |
| #[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] |
| pub struct {{ .Name }}Marker; |
| |
| #[cfg(target_os = "fuchsia")] |
| impl fidl::endpoints::ServiceMarker for {{ .Name }}Marker { |
| type Proxy = {{ .Name }}Proxy; |
| type Request = {{ .Name }}Request; |
| const SERVICE_NAME: &'static str = "{{ .ServiceName }}"; |
| } |
| |
| /// A request for one of the member protocols of {{ .Name }}. |
| /// |
| {{- range .DocComments }} |
| ///{{ . }} |
| {{- end }} |
| #[cfg(target_os = "fuchsia")] |
| pub enum {{ .Name }}Request { |
| {{- range .Members }} |
| {{- range .DocComments }} |
| ///{{ . }} |
| {{- end }} |
| {{ .CamelName }}({{ .ProtocolType }}RequestStream), |
| {{- end }} |
| } |
| |
| #[cfg(target_os = "fuchsia")] |
| impl fidl::endpoints::ServiceRequest for {{ .Name }}Request { |
| type Service = {{ .Name }}Marker; |
| |
| fn dispatch(name: &str, _channel: fidl::AsyncChannel) -> Self { |
| match name { |
| {{- range .Members }} |
| "{{ .Name }}" => Self::{{ .CamelName }}( |
| <{{ .ProtocolType }}RequestStream as fidl::endpoints::RequestStream>::from_channel(_channel), |
| ), |
| {{- end }} |
| _ => panic!("no such member protocol name for service {{ .Name }}"), |
| } |
| } |
| |
| fn member_names() -> &'static [&'static str] { |
| &[ |
| {{- range .Members }} |
| "{{ .Name }}", |
| {{- end }} |
| ] |
| } |
| } |
| |
| {{- range .DocComments }} |
| ///{{ . }} |
| {{- end }} |
| #[cfg(target_os = "fuchsia")] |
| pub struct {{ .Name }}Proxy({{ if not .Members }}#[allow(dead_code)] {{ end }}Box<dyn fidl::endpoints::MemberOpener>); |
| |
| #[cfg(target_os = "fuchsia")] |
| impl fidl::endpoints::ServiceProxy for {{ .Name }}Proxy { |
| type Service = {{ .Name }}Marker; |
| |
| fn from_member_opener(opener: Box<dyn fidl::endpoints::MemberOpener>) -> Self { |
| Self(opener) |
| } |
| } |
| |
| #[cfg(target_os = "fuchsia")] |
| impl {{ .Name }}Proxy { |
| {{- range .Members }} |
| {{- range .DocComments }} |
| ///{{ . }} |
| {{- end }} |
| pub fn connect_to_{{ .SnakeName }}(&self) -> Result<{{ .ProtocolType }}Proxy, fidl::Error> { |
| let (proxy, server_end) = fidl::endpoints::create_proxy::<{{ .ProtocolType }}Marker>()?; |
| self.connect_channel_to_{{ .SnakeName }}(server_end)?; |
| Ok(proxy) |
| } |
| |
| /// Like `connect_to_{{ .SnakeName }}`, but accepts a server end. |
| pub fn connect_channel_to_{{ .SnakeName }}(&self, server_end: fidl::endpoints::ServerEnd<{{ .ProtocolType }}Marker>) -> Result<(), fidl::Error> { |
| self.0.open_member("{{ .Name }}", server_end.into_channel()) |
| } |
| {{- end }} |
| } |
| {{- end }} |