blob: 42326a2e4ae6e2d88fe6e6f2c01fcebbd9f97f89 [file] [log] [blame]
// Copyright 2018 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.
package templates
const Struct = `
{{- define "StructForwardDeclaration" }}
class {{ .Name }};
{{- end }}
{{- define "StructDeclaration" }}
{{range .DocComments}}
//{{ . }}
{{- end}}
class {{ .Name }} {
public:
static const fidl_type_t* FidlType;
{{- range .Members }}
{{range .DocComments}}
//{{ . }}
{{- end}}
{{ .Type.Decl }} {{ .Name }}{{ if .DefaultValue }} = {{ .DefaultValue }}{{ else }}{}{{ end }};
{{- end }}
static inline ::std::unique_ptr<{{ .Name }}> New() { return ::std::make_unique<{{ .Name }}>(); }
void Encode(::fidl::Encoder* encoder, size_t offset);
static void Decode(::fidl::Decoder* decoder, {{ .Name }}* value, size_t offset);
zx_status_t Clone({{ .Name }}* result) const;
};
bool operator==(const {{ .Name }}& lhs, const {{ .Name }}& rhs);
inline bool operator!=(const {{ .Name }}& lhs, const {{ .Name }}& rhs) {
return !(lhs == rhs);
}
inline zx_status_t Clone(const {{ .Namespace }}::{{ .Name }}& value,
{{ .Namespace }}::{{ .Name }}* result) {
return value.Clone(result);
}
using {{ .Name }}Ptr = ::std::unique_ptr<{{ .Name }}>;
{{- end }}
{{- define "StructDefinition" }}
extern "C" const fidl_type_t {{ .TableType }};
const fidl_type_t* {{ .Name }}::FidlType = &{{ .TableType }};
void {{ .Name }}::Encode(::fidl::Encoder* encoder, size_t offset) {
{{- range .Members }}
::fidl::Encode(encoder, &{{ .Name }}, offset + {{ .Offset }});
{{- end }}
}
void {{ .Name }}::Decode(::fidl::Decoder* decoder, {{ .Name }}* value, size_t offset) {
{{- range .Members }}
::fidl::Decode(decoder, &value->{{ .Name }}, offset + {{ .Offset }});
{{- end }}
}
zx_status_t {{ .Name }}::Clone({{ .Name }}* result) const {
{{- range $index, $member := .Members }}
{{ if not $index }}zx_status_t {{ end -}}
_status = ::fidl::Clone({{ .Name }}, &result->{{ .Name }});
if (_status != ZX_OK)
return _status;
{{- end }}
return ZX_OK;
}
bool operator==(const {{ .Name }}& lhs, const {{ .Name }}& rhs) {
{{- range $index, $member := .Members }}
if (!::fidl::Equals(lhs.{{ .Name }}, rhs.{{ .Name }})) {
return false;
}
{{- end }}
return true;
}
{{- end }}
{{- define "StructTraits" }}
template <>
struct CodingTraits<{{ .Namespace }}::{{ .Name }}>
: public EncodableCodingTraits<{{ .Namespace }}::{{ .Name }}, {{ .Size }}> {};
inline zx_status_t Clone(const {{ .Namespace }}::{{ .Name }}& value,
{{ .Namespace }}::{{ .Name }}* result) {
return {{ .Namespace }}::Clone(value, result);
}
{{- end }}
`