blob: 7e012975d07b7675c62451ff462f99c606891e3c [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 "ProtocolDeclaration" -}}
class {{ .PythonServerName }}(ServerBase, ABC):
{{- if .DocComments }}
"""
{{- range .DocComments }}
{{ . | escapeQuotes | trimSpace | indentNonEmpty4 }}
{{- end }}
"""
{{- end }}
__fidl_kind__ = "server"
library = "{{ .Library }}"
method_map: typing.Dict[int, MethodInfo] = {
{{- range .PythonMethods }}
{{- if .HasRequest -}}
{{ .Ordinal }}: MethodInfo(
name="{{ .PythonName }}",
request_ident="{{ .PythonRequestIdent }}",
requires_response={{ if .HasResponse }}True{{ else }}False{{ end }},
empty_response={{ if .EmptyResponse }}True{{ else }}False{{ end }},
has_result={{ if (or .HasFrameworkError .HasError) }}True{{ else }}False{{ end }},
response_identifier="{{ .PythonResponseIdentifier }}",
),
{{- end -}}
{{- end -}}
}
{{ range .PythonMethods }}
{{ if .HasRequest -}}
{{ .PythonResponseAlias }}: typing.TypeAlias = {{ if (or .HasFrameworkError .HasError) }}typing.Union[
{{- if .HasFrameworkError -}}
FrameworkError,
{{ end -}}
{{- if .HasError -}}
DomainError,
{{ end -}}
{{- if .PythonResponseSuccessPayload -}}
{{ .PythonResponseSuccessPayload.PythonType.PythonName }},
{{ else -}}
{{ .PythonResponsePayload.PythonType.PythonName }},
{{ end -}}
]{{ else }}
{{- if .PythonResponsePayload }}
{{- .PythonResponsePayload.PythonType.PythonName -}}
{{- else -}}
None
{{- end }}
{{- end }}
@abstractmethod
def {{ .PythonName }}(
self,
{{- if .PythonRequestPayload }}
request: {{ .PythonRequestPayload.PythonType.PythonName }},
{{- end }}
) -> collections.abc.Coroutine[typing.Any, typing.Any, {{ .PythonResponseAlias }}] | {{ .PythonResponseAlias }}:
...
{{ else -}}
def {{ .PythonName }}(
self,
{{- if and .PythonResponsePayload .PythonResponsePayload.PythonParameters }}
*,
{{- range .PythonResponsePayload.PythonParameters }}
{{ .PythonName }}: {{ .PythonType.PythonName }}{{- if .PythonNoneDefault }} | None=None{{- end }},
{{- end }}
{{- end }}
) -> None:
{{- if .PythonResponsePayload }}
{{- if .PythonResponsePayload.PythonParameters }}
msg = {{ .PythonResponsePayload.PythonType.PythonName }}(
{{ range .PythonResponsePayload.PythonParameters -}}
{{ .PythonName }},
{{- end }}
)
{{- else }}
msg = {{ .PythonResponsePayload.PythonType.PythonName }}()
{{- end }}
{{- else }}
msg = None
{{- end }}
self._send_event({{ .Ordinal }}, "{{ $.Library }}", msg)
{{ end -}}
{{- end }}
class {{ .PythonClientName }}(FidlClient):
{{- if .DocComments }}
"""
{{- range .DocComments }}
{{ . | escapeQuotes | trimSpace | indentNonEmpty4 }}
{{- end }}
"""
{{- end }}
__fidl_kind__ = "client"
library = "{{ .Library }}"
{{ range .PythonMethods -}}
{{- if .HasRequest }}
def {{ .PythonName }}(
self,
{{- if and .PythonRequestPayload .PythonRequestPayload.PythonParameters }}
*,
{{- range .PythonRequestPayload.PythonParameters }}
{{ .PythonName }}: {{ .PythonType.PythonName }}{{- if .PythonNoneDefault }} | None=None{{- end }},
{{- end }}
{{- end }}
) -> {{ if .HasResponse -}}collections.abc.Coroutine[
typing.Any,
typing.Any,
{{ if .PythonResponsePayload -}}
{{ .PythonResponsePayload.PythonType.PythonName }}
{{- else -}}
None
{{- end }}
]
{{- else -}}None{{ end }}:
{{- if .PythonRequestPayload }}
{{- if .PythonRequestPayload.PythonParameters }}
msg = {{ .PythonRequestPayload.PythonType.PythonName }}(
{{ range .PythonRequestPayload.PythonParameters -}}
{{ .PythonName }},
{{- end }}
)
{{- else }}
msg = {{ .PythonRequestPayload.PythonType.PythonName }}()
{{- end }}
{{- else }}
msg = None
{{- end }}
{{ if .HasResponse -}}
{{- if .PythonResponsePayload -}}
ret = typing.cast(
collections.abc.Coroutine[typing.Any, typing.Any, {{ .PythonResponsePayload.PythonType.PythonName }}],
self._send_two_way_fidl_request(
{{ .Ordinal }}, "{{ $.Library }}", msg,
),
)
return ret
{{- else -}}
ret = typing.cast(
collections.abc.Coroutine[typing.Any, typing.Any, None],
self._send_two_way_fidl_request(
{{ .Ordinal }}, "{{ $.Library }}", msg,
),
)
return ret
{{- end -}}
{{- else }}
self._send_one_way_fidl_request(
0, {{ .Ordinal }}, "{{ $.Library }}", msg,
)
{{- end }}
{{ end -}}
{{- end }}
class {{ .PythonEventHandlerName }}(EventHandlerBase, ABC):
{{- if .DocComments }}
"""
{{- range .DocComments }}
{{ . | escapeQuotes | trimSpace | indentNonEmpty4 }}
{{- end }}
"""
{{- end }}
__fidl_kind__ = "event_handler"
library = "{{ .Library }}"
method_map: typing.Dict[int, MethodInfo] = {
{{- range .PythonMethods }}
{{- if not .HasRequest -}}
{{ .Ordinal }}: MethodInfo(
name="{{ .PythonName }}",
request_ident="{{ .PythonResponseIdentifier }}",
requires_response=False,
empty_response=False,
has_result=False,
response_identifier=None,
),
{{- end -}}
{{- end -}}
}
{{ range .PythonMethods -}}
{{- if not .HasRequest }}
@abstractmethod
def {{ .PythonName }}(
self,
{{- if .PythonResponsePayload }}
request: {{ .PythonResponsePayload.PythonType.PythonName }},
{{- end }}
) -> collections.abc.Coroutine[typing.Any, typing.Any, None] | None:
...
{{ end -}}
{{- end }}
{{ .PythonMarkerName }} = FidlProtocolMarker("{{ .Marker }}")
{{ range .PythonMethods }}
fidl.register_method(
{{ .Ordinal }},
{{ if .PythonRequestPayload }}{{ .PythonRequestPayload.PythonType.PythonName }}{{ else }}None{{ end }},
{{ if .PythonResponsePayload }}{{ .PythonResponsePayload.PythonType.PythonName }}{{ else }}None{{ end }},
)
{{- end }}
{{ end }}