package io.muoncore.codec.json; import io.muoncore.codec.Codecs; import io.muoncore.codec.MuonCodec; import io.muoncore.exception.MuonEncodingException; import io.muoncore.exception.MuonException; import java.io.UnsupportedEncodingException; import java.lang.reflect.Type; import java.util.Arrays; import java.util.Collections; import java.util.Optional; public class JsonOnlyCodecs implements Codecs { private MuonCodec defaultCodec; public JsonOnlyCodecs() { defaultCodec = new GsonCodec(); } @Override public String[] getAvailableCodecs() { return new String[] { defaultCodec.getContentType() }; } @Override public EncodingResult encode(Object object, String[] acceptableContentTypes) { try { return new EncodingResult(defaultCodec.encode(object), defaultCodec.getContentType()); } catch (UnsupportedEncodingException e) { return new EncodingResult(new MuonException("Unable to encode object " + object.getClass().getSimpleName(), e)); } } @Override public <T> T decode(byte[] source, String contentType, Type type) { if (!contentType.equals(defaultCodec.getContentType())) { throw new MuonEncodingException("Content type " + contentType + " is not supported. This codec supports " + Arrays.toString(getAvailableCodecs())); } if (source == null) return null; return defaultCodec.decode(source, type); } @Override public Optional<SchemaInfo> getSchemaFor(Class type) { return Optional.empty(); } }