1
1
use handlebars:: {
2
- Context , Handlebars , Helper , HelperDef , HelperResult , Output , RenderContext , RenderError ,
2
+ Context , Handlebars , Helper , HelperDef , HelperResult , Output , RenderContext , RenderErrorReason ,
3
3
} ;
4
4
5
5
use rocket:: request:: FromParam ;
@@ -149,55 +149,64 @@ impl TeamHelperParam {
149
149
impl HelperDef for TeamHelper {
150
150
fn call < ' reg : ' rc , ' rc > (
151
151
& self ,
152
- h : & Helper < ' reg , ' rc > ,
152
+ h : & Helper < ' rc > ,
153
153
_: & ' reg Handlebars ,
154
154
context : & ' rc Context ,
155
155
rcx : & mut RenderContext < ' reg , ' rc > ,
156
156
out : & mut dyn Output ,
157
157
) -> HelperResult {
158
158
let Some ( name) = h. param ( 0 ) else {
159
- return Err ( RenderError :: new (
159
+ return Err ( RenderErrorReason :: ParamNotFoundForIndex (
160
160
"{{team-text}} must have at least two parameters" ,
161
- ) ) ;
161
+ 0 ,
162
+ )
163
+ . into ( ) ) ;
162
164
} ;
163
165
let Some ( name) = name. relative_path ( ) else {
164
- return Err ( RenderError :: new (
166
+ return Err ( RenderErrorReason :: InvalidParamType (
165
167
"{{team-text}} takes only identifier parameters" ,
166
- ) ) ;
168
+ )
169
+ . into ( ) ) ;
167
170
} ;
168
171
169
172
let Some ( id) = h. param ( 1 ) else {
170
- return Err ( RenderError :: new (
173
+ return Err ( RenderErrorReason :: ParamNotFoundForIndex (
171
174
"{{team-text}} must have at least two parameters" ,
172
- ) ) ;
175
+ 1 ,
176
+ )
177
+ . into ( ) ) ;
173
178
} ;
174
179
let Some ( id) = id. relative_path ( ) else {
175
- return Err ( RenderError :: new (
180
+ return Err ( RenderErrorReason :: InvalidParamType (
176
181
"{{team-text}} takes only identifier parameters" ,
177
- ) ) ;
182
+ )
183
+ . into ( ) ) ;
178
184
} ;
179
185
180
186
let param = match id. as_str ( ) {
181
187
"name" => TeamHelperParam :: Name ,
182
188
"description" => TeamHelperParam :: Description ,
183
189
"role" => {
184
190
let Some ( role_id) = h. param ( 2 ) else {
185
- return Err ( RenderError :: new (
191
+ return Err ( RenderErrorReason :: ParamNotFoundForIndex (
186
192
"{{team-text}} requires a third parameter for the role id" ,
187
- ) ) ;
193
+ 2 ,
194
+ )
195
+ . into ( ) ) ;
188
196
} ;
189
197
TeamHelperParam :: Role ( role_id. value ( ) . as_str ( ) . unwrap ( ) . to_owned ( ) )
190
198
}
191
199
unrecognized => {
192
- return Err ( RenderError :: new ( format ! (
200
+ return Err ( RenderErrorReason :: Other ( format ! (
193
201
"unrecognized {{{{team-text}}}} param {unrecognized:?}" ,
194
- ) ) ) ;
202
+ ) )
203
+ . into ( ) ) ;
195
204
}
196
205
} ;
197
206
198
207
let team = rcx
199
208
. evaluate ( context, name)
200
- . map_err ( |e| RenderError :: from_error ( & format ! ( "Cannot find team {}" , name ) , e ) ) ?;
209
+ . map_err ( |e| RenderErrorReason :: NestedError ( Box :: new ( e ) ) ) ?;
201
210
let lang = context
202
211
. data ( )
203
212
. get ( "lang" )
@@ -210,18 +219,18 @@ impl HelperDef for TeamHelper {
210
219
if lang == "en-US" {
211
220
let english = param. english ( team. as_json ( ) ) ;
212
221
out. write ( english)
213
- . map_err ( |e| RenderError :: from_error ( "failed to render English team data" , e ) ) ?;
222
+ . map_err ( |e| RenderErrorReason :: NestedError ( Box :: new ( e ) ) ) ?;
214
223
} else if let Some ( value) = self . i18n . lookup_no_default_fallback (
215
224
& lang. parse ( ) . expect ( "language must be valid" ) ,
216
225
& param. fluent_id ( team_name) ,
217
226
None ,
218
227
) {
219
228
out. write ( & value)
220
- . map_err ( |e| RenderError :: from_error ( "failed to render translated team data" , e ) ) ?;
229
+ . map_err ( |e| RenderErrorReason :: NestedError ( Box :: new ( e ) ) ) ?;
221
230
} else {
222
231
let english = param. english ( team. as_json ( ) ) ;
223
232
out. write ( english)
224
- . map_err ( |e| RenderError :: from_error ( "failed to render" , e ) ) ?;
233
+ . map_err ( |e| RenderErrorReason :: NestedError ( Box :: new ( e ) ) ) ?;
225
234
}
226
235
Ok ( ( ) )
227
236
}
0 commit comments