package com.hubspot.singularity.data.transcoders; import static com.google.common.base.Preconditions.checkNotNull; import static java.nio.charset.StandardCharsets.UTF_8; import javax.annotation.Nullable; import com.google.common.base.Function; import com.google.common.base.Throwables; public final class Transcoders { private Transcoders() { throw new AssertionError("do not instantiate"); } public static <T> Function<T, byte[]> getToBytesFunction(final Transcoder<T> transcoder) { checkNotNull(transcoder, "transcoder is null"); return new Function<T, byte[]>() { @Override public byte[] apply(@Nullable T value) { try { return transcoder.toBytes(value); } catch (Throwable e) { throw Throwables.propagate(e); } } }; } public static <T> Function<byte[], T> getFromBytesFunction(final Transcoder<T> transcoder) { checkNotNull(transcoder, "transcoder is null"); return new Function<byte[], T>() { @Override public T apply(@Nullable byte[] value) { try { return transcoder.fromBytes(value); } catch (Throwable e) { throw Throwables.propagate(e); } } }; } public static <T> Function<String, T> getFromStringFunction(final Transcoder<T> transcoder) { checkNotNull(transcoder, "transcoder is null"); return new Function<String, T>() { @Override public T apply(@Nullable String value) { if (value == null) { return null; } try { return transcoder.fromBytes(value.getBytes(UTF_8)); } catch (Throwable e) { throw Throwables.propagate(e); } } }; } }