Как можно расшифровать похожие структуры JSON?
Я использую @glennsl
bs-json
модуль для декодирования некоторых ответов JSON, но все ответы JSON имеют некоторые общие поля в дополнение к их уникальной полезной нагрузке. Кроме того, ответы JSON (через XMLHTTPRequest) различаются в зависимости от того, успешны они или нет: они не будут включать элемент.
Мне интересно, есть ли способ создать метод, позволяющий использовать декодер для обобщенного формата. Я думал что-то вроде:
module Decode {
type msgCheck = {
success: bool,
command: string,
errmsg: string,
errnum: int,
};
// type msgComplete('body) = {
// success: bool,
// command: string,
// errmsg: string,
// errnum: int,
// body: 'body, /* This is what the incoming JSON looks like. */
// }
let msgCheck = json => Json.Decode.{
success: json |> field("success", bool),
command: json |> field("command", string),
errmsg: json |> field("error_string", string),
errnum: json |> field("error", int),
};
let jsonDecode = ('body, bodyDecoder, response) => {
let msgCheck = response -> msgCheck;
switch msgCheck.success {
| true => {
let (r:'body) = response -> bodyDecoder;
return (true, Some(r)) /* returning body (only) preferable. */
}
| false => {
Js.log(msgCheck.errmsg);
return (false, None)
}
}
};
}
Есть ли способ создать шаблонный метод в reasonml? Или просто оберните
'body
введите
option
элемент и использование
optional()
в
field()
звонки?