blob: d5b38ae826be9fded79cf18775c426a815b7819a [file] [log] [blame] [edit]
{{/*
// 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.
*/}}
{{- define "StructDeclaration" }}
{{- range .DocComments }}
///{{ . }}
{{- end }}
{{ .Derives }}
{{- if .UseFidlStructCopy }}
#[repr(C)]
{{- end }}
pub struct {{ .Name }}{{ if not .Members }};{{ else }}{
{{- range .Members }}
{{- range .DocComments }}
///{{ . }}
{{- end }}
pub {{ .Name }}: {{ .Type.Owned }},
{{- end }}
}
{{- end }}
{{- if .IsResourceType }}
impl fidl::Standalone for {{ .Name }} {}
{{- else }}
impl fidl::Persistable for {{ .Name }} {}
{{- end }}
fidl_struct! {
{{- if not .Members }}
empty: true,
{{- else if .UseFidlStructCopy }}
copy: true,
{{- end }}
name: {{ .Name }},
{{- if .IsResourceType }}
resource: true,
{{- end }}
{{- if .Members }}
members: [
{{- range $index, $member := .Members }}
{{ .Name }} {
ty: {{ .Type.Fidl }},
{{- if .Type.IsResourceType }}
resource: true,
{{- end }}
index: {{ $index }},
typevar: T{{ $index }},
offset_v1: {{ .OffsetV1 }},
offset_v2: {{ .OffsetV2 }},
},
{{- end }}
],
padding_v1: [
{{- if .UseFidlStructCopy }}
{{- range .FlattenedPaddingMarkersV1 }}
{
ty: {{ .Type }},
offset: {{ .Offset }},
mask: {{ .Mask }},
},
{{- end }}
{{- else }}
{{- range .PaddingMarkersV1 }}
{
ty: {{ .Type }},
offset: {{ .Offset }},
mask: {{ .Mask }},
},
{{- end }}
{{- end }}
],
padding_v2: [
{{- if .UseFidlStructCopy }}
{{- range .FlattenedPaddingMarkersV2 }}
{
ty: {{ .Type }},
offset: {{ .Offset }},
mask: {{ .Mask }},
},
{{- end }}
{{- else }}
{{- range .PaddingMarkersV2 }}
{
ty: {{ .Type }},
offset: {{ .Offset }},
mask: {{ .Mask }},
},
{{- end }}
{{- end }}
],
size_v1: {{ .SizeV1 }},
size_v2: {{ .SizeV2 }},
align_v1: {{ .AlignmentV1 }},
align_v2: {{ .AlignmentV2 }},
{{- end }}
}
{{- end }}