All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.kfoundation.java.serialization.ValueReadWriter Maven / Gradle / Ivy

The newest version!
// --------------------------------------------------------------------------
//   ██╗  ██╗███████╗
//   ██║ ██╔╝██╔════╝   The KFoundation Project (www.kfoundation.net)
//   █████╔╝ █████╗     KFoundation for Scala Library
//   ██╔═██╗ ██╔══╝     Copyright (c) 2020 Mindscape Inc.
//   ██║  ██╗██║        Terms of KnoRBA Free Public License Agreement Apply
//   ╚═╝  ╚═╝╚═╝
// --------------------------------------------------------------------------

package net.kfoundation.java.serialization;

import java.util.List;
import java.util.Optional;



/**
 * A ValueReadWriter for type T can act as both ValueReader and ValueReader
 * for that type.
 */
public interface ValueReadWriter extends ValueReader, ValueWriter {


    /**
     * Produces a read-writer for list of values of type T.
     */
    default ValueReadWriter> toListReadWriter() {
        return new ValueReadWriter<>() {
            @Override
            public List read(ObjectDeserializer deserializer) {
                return ValueReadWriter.this.readList(deserializer);
            }
            @Override
            public void write(ObjectSerializer serializer, List value) {
                ValueReadWriter.this.writeList(serializer, value);
            }
        };
    }


    /**
     * Produces a read-writer for where value of type T is optional.
     */
    default ValueReadWriter> toOptionalReadWriter() {
        return new ValueReadWriter<>() {
            @Override
            public Optional read(ObjectDeserializer deserializer) {
                return Optional.of(ValueReadWriter.this.read(deserializer));
            }

            @Override
            public void write(ObjectSerializer serializer, Optional value) {
                value.ifPresent(v -> ValueReadWriter.this.write(serializer, v));
            }
        };
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy