blob: f27f74fbc84deaae8cf551b6825764603dd0a703 [file] [log] [blame]
/**
* 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 java.nio.ByteBuffer;
/**
* Factory for creating serializers / deserializers.
*/
public class Serdes {
static public final class LongSerde implements Serde<Long> {
@Override
public Serializer<Long> serializer() {
return new LongSerializer();
}
@Override
public Deserializer<Long> deserializer() {
return new LongDeserializer();
}
}
static public final class IntegerSerde implements Serde<Integer> {
@Override
public Serializer<Integer> serializer() {
return new IntegerSerializer();
}
@Override
public Deserializer<Integer> deserializer() {
return new IntegerDeserializer();
}
}
static public final class DoubleSerde implements Serde<Double> {
@Override
public Serializer<Double> serializer() {
return new DoubleSerializer();
}
@Override
public Deserializer<Double> deserializer() {
return new DoubleDeserializer();
}
}
static public final class StringSerde implements Serde<String> {
@Override
public Serializer<String> serializer() {
return new StringSerializer();
}
@Override
public Deserializer<String> deserializer() {
return new StringDeserializer();
}
}
static public final class ByteBufferSerde implements Serde<ByteBuffer> {
@Override
public Serializer<ByteBuffer> serializer() {
return new ByteBufferSerializer();
}
@Override
public Deserializer<ByteBuffer> deserializer() {
return new ByteBufferDeserializer();
}
}
static public final class ByteArraySerde implements Serde<byte[]> {
@Override
public Serializer<byte[]> serializer() {
return new ByteArraySerializer();
}
@Override
public Deserializer<byte[]> deserializer() {
return new ByteArrayDeserializer();
}
}
@SuppressWarnings("unchecked")
static public <T> Serde<T> serdeFrom(Class<T> type) {
if (String.class.isAssignableFrom(type)) {
return (Serde<T>) String();
}
if (Integer.class.isAssignableFrom(type)) {
return (Serde<T>) Integer();
}
if (Long.class.isAssignableFrom(type)) {
return (Serde<T>) Long();
}
if (Double.class.isAssignableFrom(type)) {
return (Serde<T>) Double();
}
if (byte[].class.isAssignableFrom(type)) {
return (Serde<T>) ByteArray();
}
if (ByteBufferSerde.class.isAssignableFrom(type)) {
return (Serde<T>) ByteBuffer();
}
// 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 <T> Serde<T> serdeFrom(final Serializer<T> serializer, final Deserializer<T> 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 Serde<T>() {
@Override
public Serializer<T> serializer() {
return serializer;
}
@Override
public Deserializer<T> deserializer() {
return deserializer;
}
};
}
/*
* A serde for nullable long type.
*/
static public Serde<Long> Long() {
return new LongSerde();
}
/*
* A serde for nullable int type.
*/
static public Serde<Integer> Integer() {
return new IntegerSerde();
}
/*
* A serde for nullable long type.
*/
static public Serde<Double> Double() {
return new DoubleSerde();
}
/*
* A serde for nullable string type.
*/
static public Serde<String> String() {
return new StringSerde();
}
/*
* A serde for nullable byte array type.
*/
static public Serde<ByteBuffer> ByteBuffer() {
return new ByteBufferSerde();
}
/*
* A serde for nullable byte array type.
*/
static public Serde<byte[]> ByteArray() {
return new ByteArraySerde();
}
}