Parses a JavaScript object previously serialised as aValidation.toJSON()
into a proper Validation 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 aValidation.toJSON()
into a proper Validation structure.
See the docs for adt/union/derivations/serialization
for more details.
const Validation = require('folktale/validation');
Validation.fromJSON(Validation.Success(1).toJSON());
// ==> Validation.Success(1)
Validation.fromJSON(Validation.Failure(1).toJSON());
// ==> Validation.Failure(1)
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);
}