Skip to content

Commit 3e46efe

Browse files
committed
Add proper, helpful error messages for the oneOf decoder
1 parent e2ff7bd commit 3e46efe

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

index.js

+18-1
Original file line numberDiff line numberDiff line change
@@ -238,16 +238,33 @@
238238

239239
case ONE_OF: {
240240
var decs = decoder.decoders;
241+
var errs = new Array(decs.length);
241242

242243
for (var i=0; i<decs.length; i++) {
243244
var result = decodeInternal(decs[i], value);
244245

245246
if (isOk(result)) {
246247
return result;
248+
} else {
249+
errs[i] = result;
250+
}
251+
}
252+
253+
var str = 'oneOf failed, because none of its child decoders were successful in decoding the value, here is a list of all errors:\n\n';
254+
255+
for (var err_i = 0; err_i < errs.length; err_i++) {
256+
var error = errs[err_i];
257+
258+
str += err_i === 0 ? '┌' : '├';
259+
str += '── Decoder at index ' + err_i + ' reported:\n│\n│';
260+
str += ('\n' + error.msg).replace(/\n/g, '\n│ ') + '\n│';
261+
262+
if (err_i < errs.length - 1) {
263+
str += '\n│\n';
247264
}
248265
}
249266

250-
return err('No oneOf decoder matched');
267+
return err(str + '\n┴\n');
251268
}
252269

253270
case UNKNOWN: {

0 commit comments

Comments
 (0)