Parses a JavaScript object previously serialised as aMaybe.toJSON()
into a proper Maybe structure.
This API is still experimental, so it may change or be removed in future versions. You should not rely on it for production applications.
type JSONSerialisation = {
"@@type": String,
"@@tag": String,
"@@value": Object Any
}
type JSONParser = {
fromJSON: (JSONSerialisation, Array JSONParser) => Variant
}
(JSONSerialisation, Array JSONParser) => Variant
Parses a JavaScript object previously serialised as aMaybe.toJSON()
into a proper Maybe structure.
See the docs for adt/union/derivations/serialization
for more details.
const Maybe = require('folktale/maybe');
Maybe.fromJSON(Maybe.Just(1).toJSON());
// ==> Maybe.Just(1)
Maybe.fromJSON(Maybe.Nothing().toJSON());
// ==> Maybe.Nothing()
function(value, parsers = { [typeName]: adt }, keysIndicateType = false) {
const valueTypeName = value[typeJsonKey];
const valueTagName = value[tagJsonKey];
const valueContents = value[valueJsonKey];
assertType(typeName, valueTypeName);
const parsersByType = keysIndicateType ? parsers
: /*otherwise*/ indexByType(values(parsers));
const parsedValue = mapValues(valueContents, parseValue(parsersByType));
return extend(Object.create(adt[valueTagName].prototype), parsedValue);
}