| {{/* |
| // 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 .Doc }} |
| ///{{ . -}} |
| {{- end }} |
| class {{ .Name }} extends $fidl.Struct { |
| const {{ .Name }}({ |
| {{- range .Members }} |
| {{ if not .Type.Nullable }}{{ if not .DefaultValue }}required {{ end }}{{ end -}} |
| this.{{ .Name }}{{ if .DefaultValue }}= {{ .DefaultValue }}{{ end }}, |
| {{- end }} |
| }); |
| {{ .Name }}.clone({{ .Name }} $orig, { |
| {{- range .Members }} |
| {{ .Type.OptionalDecl }} {{ .Name }}, |
| {{- end }} |
| }) : this( |
| {{- range .Members }} |
| {{ .Name }}: {{ .Name }} ?? $orig.{{ .Name }}, |
| {{- end }} |
| ); |
| |
| |
| {{ if .HasNullableField }} |
| {{ .Name }}.cloneWithout({{ .Name }} $orig, { |
| {{- range .Members }} |
| {{ if .Type.Nullable }}bool {{ .Name }}=false,{{ end }} |
| {{- end }} |
| }) : this( |
| {{- range .Members }} |
| {{ if .Type.Nullable }} |
| {{ .Name }}: {{ .Name }} ? null : $orig.{{ .Name }}, |
| {{ else }} |
| {{ .Name }}: $orig.{{ .Name }}, |
| {{ end }} |
| {{- end }} |
| ); |
| {{ end }} |
| |
| {{ .Name }} $cloneWith({ |
| {{- range .Members }} |
| {{ if .Type.Nullable }}$fidl.OptionalNullable<{{ .Type.Decl }}> {{ .Name }} = |
| const $fidl.OptionalNullable.undefined(), |
| {{- else }}{{ .Type.Decl }}? {{ .Name }}, |
| {{- end }} |
| {{- end }} |
| }) { |
| return {{ .Name }}( |
| {{- range .Members }} |
| {{ if .Type.Nullable }}{{ .Name }}: {{ .Name }}.or(this.{{ .Name }}), |
| {{- else }}{{ .Name }}: {{ .Name }} ?? this.{{ .Name }}, |
| {{- end }} |
| {{- end }} |
| ); |
| } |
| |
| {{- range .Members }} |
| {{- range .Doc }} |
| ///{{ . -}} |
| {{- end }} |
| final {{ .Type.Decl }} {{ .Name }}; |
| {{- end }} |
| |
| @override |
| List<Object?> get $fields { |
| return <Object?>[ |
| {{- range .Members }} |
| {{ .Name }}, |
| {{- end }} |
| ]; |
| } |
| |
| {{- range $index, $member := .Members }} |
| static const $fieldType{{ $index}} = {{ $member.TypeSymbol }}; |
| {{- end }} |
| |
| @override |
| void $encode($fidl.Encoder $encoder, int $offset, int $depth) { |
| {{- range $index, $member := .Members }} |
| $fieldType{{ $index }}.encode( |
| $encoder, {{ $member.Name }}, $offset + {{ $member.OffsetV2 }}, $depth); |
| {{- end }} |
| } |
| |
| static {{ .Name }} _structDecode($fidl.Decoder $decoder, int $offset, int $depth) { |
| switch ($decoder.wireFormat) { |
| case $fidl.WireFormat.v2: |
| {{- range $padding := .Paddings }} |
| {{- if ne $padding.PaddingV2 0 }} |
| $decoder.checkPadding($offset + {{ $padding.OffsetV2 }}, {{ $padding.PaddingV2 }}); |
| {{ end -}} |
| {{ end -}} |
| return {{ .Name }}( |
| {{ range $index, $member := .Members }} |
| {{- if ne $index 0 }},{{ end }} |
| {{ $member.Name }}: $fieldType{{ $index }}.decode( |
| $decoder, $offset + {{ $member.OffsetV2 }}, $depth) |
| {{- end -}} |
| ); |
| } |
| } |
| } |
| |
| // See fxbug.dev/7644: |
| // ignore: recursive_compile_time_constant |
| const $fidl.StructType<{{ .Name }}> {{ .TypeSymbol }} = {{ .TypeExpr }}; |
| {{ end }} |