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

org.apache.kafka.common.serialization.Serdes Maven / Gradle / Ivy

There is a newer version: 3.9.0
Show newest version
/**
 * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
 * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
 * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
 * License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */

package org.apache.kafka.common.serialization;

import org.apache.kafka.common.utils.Bytes;

import java.nio.ByteBuffer;
import java.util.Map;

/**
 * Factory for creating serializers / deserializers.
 */
public class Serdes {

    static private class WrapperSerde implements Serde {
        final private Serializer serializer;
        final private Deserializer deserializer;

        public WrapperSerde(Serializer serializer, Deserializer deserializer) {
            this.serializer = serializer;
            this.deserializer = deserializer;
        }

        @Override
        public void configure(Map configs, boolean isKey) {
            serializer.configure(configs, isKey);
            deserializer.configure(configs, isKey);
        }

        @Override
        public void close() {
            serializer.close();
            deserializer.close();
        }

        @Override
        public Serializer serializer() {
            return serializer;
        }

        @Override
        public Deserializer deserializer() {
            return deserializer;
        }
    }

    static public final class LongSerde extends WrapperSerde {
        public LongSerde() {
            super(new LongSerializer(), new LongDeserializer());
        }
    }

    static public final class IntegerSerde extends WrapperSerde {
        public IntegerSerde() {
            super(new IntegerSerializer(), new IntegerDeserializer());
        }
    }

    static public final class DoubleSerde extends WrapperSerde {
        public DoubleSerde() {
            super(new DoubleSerializer(), new DoubleDeserializer());
        }
    }

    static public final class StringSerde extends WrapperSerde {
        public StringSerde() {
            super(new StringSerializer(), new StringDeserializer());
        }
    }

    static public final class ByteBufferSerde extends WrapperSerde {
        public ByteBufferSerde() {
            super(new ByteBufferSerializer(), new ByteBufferDeserializer());
        }
    }

    static public final class BytesSerde extends WrapperSerde {
        public BytesSerde() {
            super(new BytesSerializer(), new BytesDeserializer());
        }
    }

    static public final class ByteArraySerde extends WrapperSerde {
        public ByteArraySerde() {
            super(new ByteArraySerializer(), new ByteArrayDeserializer());
        }
    }

    @SuppressWarnings("unchecked")
    static public  Serde serdeFrom(Class type) {
        if (String.class.isAssignableFrom(type)) {
            return (Serde) String();
        }

        if (Integer.class.isAssignableFrom(type)) {
            return (Serde) Integer();
        }

        if (Long.class.isAssignableFrom(type)) {
            return (Serde) Long();
        }

        if (Double.class.isAssignableFrom(type)) {
            return (Serde) Double();
        }

        if (byte[].class.isAssignableFrom(type)) {
            return (Serde) ByteArray();
        }

        if (ByteBuffer.class.isAssignableFrom(type)) {
            return (Serde) ByteBuffer();
        }

        if (Bytes.class.isAssignableFrom(type)) {
            return (Serde) Bytes();
        }

        // TODO: we can also serializes objects of type T using generic Java serialization by default
        throw new IllegalArgumentException("Unknown class for built-in serializer");
    }

    /**
     * Construct a serde object from separate serializer and deserializer
     *
     * @param serializer    must not be null.
     * @param deserializer  must not be null.
     */
    static public  Serde serdeFrom(final Serializer serializer, final Deserializer deserializer) {
        if (serializer == null) {
            throw new IllegalArgumentException("serializer must not be null");
        }
        if (deserializer == null) {
            throw new IllegalArgumentException("deserializer must not be null");
        }

        return new WrapperSerde<>(serializer, deserializer);
    }

    /*
     * A serde for nullable {@code Long} type.
     */
    static public Serde Long() {
        return new LongSerde();
    }

    /*
     * A serde for nullable {@code Integer} type.
     */
    static public Serde Integer() {
        return new IntegerSerde();
    }

    /*
     * A serde for nullable {@code Double} type.
     */
    static public Serde Double() {
        return new DoubleSerde();
    }

    /*
     * A serde for nullable {@code String} type.
     */
    static public Serde String() {
        return new StringSerde();
    }

    /*
     * A serde for nullable {@code ByteBuffer} type.
     */
    static public Serde ByteBuffer() {
        return new ByteBufferSerde();
    }

    /*
     * A serde for nullable {@code Bytes} type.
     */
    static public Serde Bytes() {
        return new BytesSerde();
    }

    /*
     * A serde for nullable {@code byte[]} type.
     */
    static public Serde ByteArray() {
        return new ByteArraySerde();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy