2 * Copyright (c) 2024 PANTHEON.tech s.r.o. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package io.atomix.storage.journal;
10 import io.netty.buffer.ByteBuf;
11 import io.netty.buffer.ByteBufUtil;
12 import io.netty.buffer.Unpooled;
15 * Support for serialization of {@link Journal} entries.
17 public interface JournalSerializer<T> {
20 * Serializes given object to byte array.
22 * @param obj Object to serialize
23 * @return serialized bytes as {@link ByteBuf}
25 ByteBuf serialize(T obj) ;
28 * Deserializes given byte array to Object.
30 * @param buf serialized bytes as {@link ByteBuf}
31 * @return deserialized Object
33 T deserialize(final ByteBuf buf);
35 static <E> JournalSerializer<E> wrap(final JournalSerdes serdes) {
36 return new JournalSerializer<>() {
38 public ByteBuf serialize(final E obj) {
39 return Unpooled.wrappedBuffer(serdes.serialize(obj));
43 public E deserialize(final ByteBuf buf) {
44 return serdes.deserialize(ByteBufUtil.getBytes(buf));