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