atomic-storage: remove type dependency at segment level I/O
[controller.git] / atomix-storage / src / main / java / io / atomix / storage / journal / JournalSerializer.java
1 /*
2  * Copyright (c) 2024 PANTHEON.tech s.r.o. All rights reserved.
3  *
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
7  */
8 package io.atomix.storage.journal;
9
10 import io.netty.buffer.ByteBuf;
11 import io.netty.buffer.ByteBufUtil;
12 import io.netty.buffer.Unpooled;
13
14 /**
15  * Support for serialization of {@link Journal} entries.
16  */
17 public interface JournalSerializer<T> {
18
19     /**
20      * Serializes given object to byte array.
21      *
22      * @param obj Object to serialize
23      * @return serialized bytes as {@link ByteBuf}
24      */
25     ByteBuf serialize(T obj) ;
26
27     /**
28      * Deserializes given byte array to Object.
29      *
30      * @param buf serialized bytes as {@link ByteBuf}
31      * @return deserialized Object
32      */
33     T deserialize(final ByteBuf buf);
34
35     static <E> JournalSerializer<E> wrap(final JournalSerdes serdes) {
36         return new JournalSerializer<>() {
37             @Override
38             public ByteBuf serialize(final E obj) {
39                 return Unpooled.wrappedBuffer(serdes.serialize(obj));
40             }
41
42             @Override
43             public E deserialize(final ByteBuf buf) {
44                 return serdes.deserialize(ByteBufUtil.getBytes(buf));
45             }
46         };
47     }
48 }