blob: e1163c00404a0b9ff94bb36fb8da224d73352b9a [file] [log] [blame]
{{/*
// 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 }}
{{- if eq .Type.ProtocolTransport "Channel" }}
{{- range .DocComments }}
///{{ . }}
{{- end }}
{{ .CamelName }}({{ .ProtocolType }}RequestStream),
{{- end }}
{{- 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 }}
{{- if eq .Type.ProtocolTransport "Channel" }}
"{{ .Name }}" => Self::{{ .CamelName }}(
<{{ .ProtocolType }}RequestStream as fidl::endpoints::RequestStream>::from_channel(_channel),
),
{{- end }}
{{- end }}
_ => panic!("no such member protocol name for service {{ .Name }}"),
}
}
fn member_names() -> &'static [&'static str] {
&[
{{- range .Members }}
{{- if eq .Type.ProtocolTransport "Channel" }}
"{{ .Name }}",
{{- end }}
{{- end }}
]
}
}
{{- range .DocComments }}
///{{ . }}
{{- end }}
#[cfg(target_os = "fuchsia")]
pub struct {{ .Name }}Proxy(#[allow(dead_code)] 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 }}
{{- if eq .Type.ProtocolTransport "Channel" }}
{{- 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 returns a sync proxy.
/// See [`Self::connect_to_{{ .SnakeName }}`] for more details.
pub fn connect_to_{{ .SnakeName }}_sync(&self) -> Result<{{ .ProtocolType }}SynchronousProxy, fidl::Error> {
let (proxy, server_end) = fidl::endpoints::create_sync_proxy::<{{ .ProtocolType }}Marker>();
self.connect_channel_to_{{ .SnakeName }}(server_end)?;
Ok(proxy)
}
/// Like `connect_to_{{ .SnakeName }}`, but accepts a server end.
/// See [`Self::connect_to_{{ .SnakeName }}`] for more details.
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 }}
pub fn instance_name(&self) -> &str {
self.0.instance_name()
}
}
{{- end }}