blob: e26ff391d5419f1da26681ed5576764334d95230 [file]
{{/*
// Copyright 2025 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" -}}
@dataclass
class {{ .PythonName }}:
{{- if .DocComments }}
"""
{{- range .DocComments }}
{{ . | escapeQuotes | trimSpace | indentNonEmpty4 }}
{{- end }}
"""
{{- end }}
{{- range .PythonMembers }}
{{- if .DocComments }}
"""
{{- range .DocComments }}
{{ . | escapeQuotes | trimSpace | indentNonEmpty4 }}
{{- end }}
"""
{{- end }}
{{ .PythonName }}: {{ .PythonType.PythonName }}
{{- end }}
__fidl_kind__ = "struct"
__fidl_type__ = "{{ .PythonName }}"
__fidl_raw_type__ = "{{ .Name }}"
# TODO(https://fxbug.dev/394421154): We should probably remove this method when we
# start making breaking changes.
def __getitem__(self, item: str): # type: ignore
if not isinstance(item, str):
raise TypeError("Subscripted item must be a string")
return getattr(self, item)
def encode(self) -> tuple[bytes, list[typing.Any]]:
return fidl.encode_struct(self, type(self)._encode, {{ .TypeShapeV2.InlineSize }})
@classmethod
def decode(cls, data: bytes, handles: list[typing.Any]) -> typing.Self:
return fidl.decode_struct(data, handles, cls._decode, {{ .TypeShapeV2.InlineSize }})
def _encode(self, encoder: fidl.Encoder, _offset: int) -> None:
{{- if .PythonMembers }}
{{- range .PythonMembers }}
{{ .EncoderCall | indentNonEmpty8 }}
{{- end }}
{{- else }}
pass
{{- end }}
@classmethod
def _decode(cls, decoder: fidl.Decoder, _offset: int) -> typing.Self:
{{- if .PythonMembers }}
{{- range .PythonMembers }}
{{ .PythonName }} = {{ .DecoderCall }}
{{- end }}
return cls(
{{- range .PythonMembers }}
{{ .PythonName }}={{ .PythonName }},
{{- end }}
)
{{- else }}
return cls()
{{- end }}
# TODO(https://fxbug.dev/394421154): Assigning None (incorrectly) to each type is a consequence
# of needing to support creation of a "default object" before decoding.
@classmethod
def make_default(cls) -> typing.Self:
return cls(**{
{{- range .PythonMembers }}
"{{ .PythonName }}": None, # type: ignore[arg-type,unused-ignore]
{{- end }}
})
{{ end }}