-
Notifications
You must be signed in to change notification settings - Fork 1
/
errors.go.tmpl
116 lines (102 loc) · 3.49 KB
/
errors.go.tmpl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
{{define "errors"}}
{{- /* Generates the classes for both base Webrpc errors and custom errors defined in the schema */ -}}
{{- $rpcErrors := .WebrpcErrors -}}
{{- $schemaErrors := .Errors -}}
/// Unrecoverable errors representing an invalid use of the API, bad schema, or
/// failure in the core of Webrpc (i.e. a bug).
class WebrpcError extends Error {
WebrpcError._({
required this.id,
required this.message,
required this.httpStatus,
});
factory WebrpcError.fromCode(int code) {
switch (code) {
{{- range $_, $_ := $rpcErrors}}
{{- $isError := (lt .HTTPStatus 500)}}
{{- if $isError}}
case {{.Code}}:
return WebrpcError._(
id: ErrorId.{{firstLetterToLower .Name}},
message: '{{.Message}}',
httpStatus: {{.HTTPStatus}},
);
{{end -}}
{{end -}}
{{- range $_, $_ := $schemaErrors}}
{{- $isError := (lt .HTTPStatus 500)}}
{{- if $isError}}
case {{.Code}}:
return WebrpcError._(
id: ErrorId.{{firstLetterToLower .Name}},
message: '{{.Message}}',
httpStatus: {{.HTTPStatus}},
);
{{end -}}
{{end}}
default:
throw ArgumentError.value(code, "code", "Unrecognized");
}
}
final ErrorId id;
final String message;
final int httpStatus;
}
/// Recoverable errors that should generally be caught, representing a
/// bad state or temporary failure.
class WebrpcException implements Exception {
WebrpcException._({
required this.id,
required this.message,
required this.httpStatus,
});
factory WebrpcException.fromCode(int code) {
switch (code) {
{{- range $_, $_ := $rpcErrors}}
{{- $isError := (lt .HTTPStatus 500)}}
{{- if (not $isError)}}
case {{.Code}}:
return WebrpcException._(
id: ErrorId.{{firstLetterToLower .Name}},
message: '{{.Message}}',
httpStatus: {{.HTTPStatus}},
);
{{end -}}
{{end -}}
{{- range $_, $_ := $schemaErrors}}
{{- $isError := (lt .HTTPStatus 500)}}
{{- if (not $isError)}}
case {{.Code}}:
return WebrpcException._(
id: ErrorId.{{firstLetterToLower .Name}},
message: '{{.Message}}',
httpStatus: {{.HTTPStatus}},
);
{{end -}}
{{end}}
default:
throw ArgumentError.value(code, "code", "Unrecognized code $code");
}
}
final ErrorId id;
final String message;
final int httpStatus;
}
/// Unique ID of a custom schema error or base Webrpc error.
enum ErrorId {
{{- range $i, $_ := $rpcErrors}}
{{firstLetterToLower .Name}}(code: {{.Code}}, name: '{{.Name}}')
{{- if (lt $i (lastIndex $rpcErrors))}},{{else if $schemaErrors}},{{else}};{{end}}
{{- end}}
{{- range $i, $_ := $schemaErrors}}
{{firstLetterToLower .Name}}(code: {{.Code}}, name: '{{.Name}}')
{{- ternary (lt $i (lastIndex $schemaErrors)) "," ";"}}
{{- end}}
const ErrorId({
required this.code,
required this.name,
});
final int code;
final String name;
}
{{end}}