/*
* Hibernate OGM, Domain model persistence for NoSQL datastores
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.ogm.datastore.infinispanremote.impl.protobuf;
import java.io.IOException;
import java.util.Objects;
import org.hibernate.ogm.datastore.infinispanremote.impl.protostream.ProtostreamMappedField;
import org.hibernate.ogm.datastore.infinispanremote.impl.schema.ProtobufFieldExporter;
import org.hibernate.ogm.datastore.infinispanremote.impl.schema.ProtobufTypeExporter;
import org.infinispan.protostream.MessageMarshaller.ProtoStreamReader;
import org.infinispan.protostream.MessageMarshaller.ProtoStreamWriter;
/**
* Catching all IOException cases makes usage of lambdas inconvenient.
* Wrap all ProtofieldAccessor instances with this for convenience.
*/
final class UnsafeProtofield<T> implements ProtobufFieldExporter, ProtobufTypeExporter, ProtostreamMappedField<T> {
private final ProtofieldAccessor<T> delegate;
UnsafeProtofield(ProtofieldAccessor<T> delegate) {
Objects.requireNonNull( delegate );
this.delegate = delegate;
}
@Override
public void writeTo(ProtoStreamWriter outProtobuf, T value) {
try {
delegate.writeTo( outProtobuf, value );
}
catch (IOException e) {
throw new RuntimeException( e );
}
}
@Override
public T read(ProtoStreamReader reader) {
try {
return delegate.read( reader );
}
catch (IOException e) {
throw new RuntimeException( e );
}
}
@Override
public String getColumnName() {
return delegate.getColumnName();
}
@Override
public String getProtobufName() {
return delegate.getProtobufName();
}
@Override
public void exportProtobufFieldDefinition(StringBuilder sb) {
delegate.exportProtobufFieldDefinition( sb );
}
@Override
public void collectTypeDefinitions(TypeDeclarationsCollector typesDefCollector) {
delegate.collectTypeDefinitions( typesDefCollector );
}
@Override
public String toString() {
return "UnsafeProtofield [delegate=" + delegate + "]";
}
}