blob: 160a7b52ca0aebfd5e683d55525c4da9a46639c1 [file] [log] [blame]
{{/*
// Copyright 2021 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 "Method:Request:WireMessagingHeader" }}
{{- EnsureNamespace "" }}
{{- if .Request.IsResource }}
{{- IfdefFuchsia -}}
{{- end }}
template<>
struct {{ .WireRequest }} final {{- if .HasRequestPayload }} : public {{ .RequestPayload }}{{ end }} {
{{- range .RequestAnonymousChildren }}
using {{ .ScopedName }} = {{ .FlattenedName }};
{{- end }}
{{ if (and .RequestFlattened .HasRequestPayload) }}
explicit {{ .WireRequest.Self }}({{ .RequestPayload }} base) : {{ .RequestPayload }}(std::move(base)) {}
{{- end }}
{{- if .RequestArgs }}
explicit {{ .WireRequest.Self }}({{ RenderParams .RequestArgs }}) : {{ .RequestPayload }}
{{- if .RequestFlattened -}}
{{- "{ " }}{{ RenderForwardStructParams .RequestArgs }}}
{{- else -}}
({{ RenderForwardParams .RequestArgs }})
{{- end -}}{}
{{- end }}
{{ .WireRequest.Self }}() = default;
{{- if and .HasResponse .ResponseArgs }}
using ResponseType = {{ .WireResponse }};
{{- end }}
};
template<>
struct {{ .WireTransactionalRequest }} final {
FIDL_ALIGNDECL
fidl_message_header_t header;
{{ if .RequestArgs }}
{{ .WireRequest }} body;
explicit {{ .WireTransactionalRequest.Self }}({{ RenderParams .RequestArgs }})
: body({{ .WireRequest }}({{ RenderForwardParams .RequestArgs }})) {
_InitHeader();
}
{{- end }}
{{ .WireTransactionalRequest.Self }}() {
_InitHeader();
}
{{- if and .HasResponse .ResponseArgs }}
using ResponseType = {{ .WireTransactionalResponse }};
{{- end }}
{{- if .Request.IsResource }}
void _CloseHandles() {
{{- if .RequestArgs }}
body._CloseHandles();
{{- end }}
}
{{- end }}
private:
void _InitHeader();
};
{{- if .Request.IsResource }}
{{- EndifFuchsia -}}
{{- end }}
{{- end }}
{{- define "Method:Request:WireMessagingSource" }}
{{- EnsureNamespace "" }}
{{- if .Request.IsResource }}
{{- IfdefFuchsia -}}
{{- end }}
void {{ .WireTransactionalRequest }}::_InitHeader() {
::fidl::InitTxnHeader(&header, 0, {{ .OrdinalName }}, {{ .DynamicFlagsName }});
}
{{- if .Request.IsResource }}
{{- EndifFuchsia -}}
{{- end }}
{{- end }}
{{- define "Method:Request:NaturalMessagingHeader" }}
{{- IfdefFuchsia -}}
{{- EnsureNamespace "" }}
template <>
class {{ .NaturalRequest }} final
{{- if .RequestMessageBase }} : public {{ .RequestMessageBase }} {{ end }} {
public:
{{- if .HasRequestPayload }}
using {{ .RequestPayload }}::{{ .RequestPayload.Self }};
{{ .NaturalRequest.Self }}({{ .RequestPayload }} v) : {{ .RequestPayload }}(std::move(v)) {}
{{- end }}
};
template <>
struct {{ .RequestMessageTraits }} final {
public:
static constexpr bool kHasPayload = {{ .HasRequestPayload }};
{{- if .HasRequestPayload }}
using Payload = {{ .RequestPayload }};
{{- end }}
};
{{- EndifFuchsia -}}
{{- end }}
{{- define "Method:Request:NaturalMessagingSource" }}
{{- end }}
{{- define "Method:Request:Traits:TypeConversionsHeader" }}
template <>
struct WireNaturalConversionTraits<{{ .WireRequest }}, {{ .NaturalRequest }}> {
static {{ .NaturalRequest }} ToNatural({{ .WireRequest }} src);
static {{ .WireRequest }} ToWire(fidl::AnyArena& arena, {{ .NaturalRequest }} src);
};
template <>
struct NaturalTypeForWireType<{{ .WireRequest }}> {
using type = {{ .NaturalRequest }};
};
template <>
struct WireTypeForNaturalType<{{ .NaturalRequest }}> {
using type = {{ .WireRequest }};
};
{{- end }}
{{- define "Method:Request:Traits:TypeConversionsSource" }}
{{ .NaturalRequest }} WireNaturalConversionTraits<{{ .WireRequest }}, {{ .NaturalRequest }}>::ToNatural({{ .WireRequest }} src) {
{{- if .HasRequestPayload }}
return {{ .NaturalRequest }}(
WireNaturalConversionTraits<{{ .RequestPayload.Wire }}, {{ .RequestMessageBase }}>::ToNatural(std::move(src)));
{{- else }}
return {{ .NaturalRequest }}();
{{- end }}
}
{{ .WireRequest }} WireNaturalConversionTraits<{{ .WireRequest }}, {{ .NaturalRequest }}>::ToWire(fidl::AnyArena& arena, {{ .NaturalRequest }} src) {
{{- if .HasRequestPayload }}
return {{ .WireRequest }}(
WireNaturalConversionTraits<{{ .RequestPayload.Wire }}, {{ .RequestMessageBase }}>::ToWire(arena, std::move(src)));
{{- else }}
return {{ .WireRequest }}();
{{- end }}
}
{{- end }}