package com.codepoetics.octarine.json.deserialisation; import com.codepoetics.octarine.records.Record; import com.codepoetics.octarine.records.RecordValidationException; import com.codepoetics.octarine.records.Schema; import com.codepoetics.octarine.records.Validation; import com.fasterxml.jackson.core.JsonParser; import java.io.Reader; class ValidRecordDeserialiser<S> implements Deserialiser<Validation<S>> { private final Schema<S> schema; private final RecordDeserialiser reader; ValidRecordDeserialiser(Schema<S> schema, RecordDeserialiser reader) { this.schema = schema; this.reader = reader; } @Override public Validation<S> apply(JsonParser parser) { try { return validated(reader.apply(parser)); } catch (RecordValidationException e) { return e.toValidation(); } } @Override public Validation<S> fromReader(Reader reader) { try { return validated(this.reader.fromReader(reader)); } catch (RecordValidationException e) { return e.toValidation(); } } private Validation<S> validated(Record record) { return schema.validate(record); } }