blob: 8d815697dd5e85ac338631552a55d03785d4c37c [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 }}
{{- 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 }}