| {{/* |
| // 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 }} |