blob: f11f066c88067ba340e5eb94ac4f33042669ee19 [file] [log] [blame]
{{/*
// 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 "EnumDeclaration" -}}
{{- range .Doc }}
///{{ . -}}
{{- end }}
class {{ .Name }} extends $fidl.Enum {
static {{ if .IsStrict }}const{{ else }}final{{ end }} Map<int, {{ .Name }}> _values = {
{{- range .Members }}
{{ .Value }}: {{ .Name }},
{{- end }}
};
factory {{ .Name }}(int _v) {
if (!_values.containsKey(_v)) {
{{ if .IsStrict }}
throw $fidl.FidlError('Invalid strict enum value: $_v',
$fidl.FidlErrorCode.fidlInvalidEnumValue);
{{ else }}
_values[_v] = {{ .Name }}._(_v, true);
{{ end }}
}
return _values[_v]!;
}
{{- range .Members }}
{{- range .Doc }}
///{{ . -}}
{{- end }}
static const {{ $.Name }} {{ .Name }} = {{ $.Name }}._({{ .Value }}{{ if $.IsFlexible }}, {{ .IsUnknown }}{{ end }});
{{- end }}
{{ if .IsFlexible }}
/// Default unknown placeholder.
static const {{ $.Name }} $unknown = {{ $.Name }}._({{ .UnknownValueForTmpl | printf "%#x" }}, true);
{{ end }}
{{ if .IsStrict }}
const {{ .Name }}._(this.$value);
{{ else }}
const {{ .Name }}._(this.$value, this._isUnknown);
{{ end }}
@override
final int $value;
{{ if .IsFlexible }}
final bool _isUnknown;
{{ end }}
static const Map<String, {{ .Name }}> $valuesMap = {
{{- range .Members }}
r'{{ .Name }}': {{ .Name }},
{{- end }}
};
static const List<{{ .Name }}> $values = [
{{- range .Members }}
{{ .Name }},
{{- end }}
];
static {{ .Name }}? $valueOf(String name) => $valuesMap[name];
@override
bool isUnknown() {
{{ if .IsStrict }}
return false;
{{ else }}
return _isUnknown;
{{ end }}
}
static {{ .Name }} _ctor(int v) => {{ .Name }}(v);
}
const $fidl.EnumType<{{ .Name }}> {{ .TypeSymbol }} = {{ .TypeExpr }};
{{ end }}