JsonCodec { public static <T> JsonCodec<T> jsonCodec(Class<T> type) { requireNonNull(type, "type is null"); return new JsonCodec<>(OBJECT_MAPPER_SUPPLIER.get(), type); } JsonCodec(ObjectMapper mapper, Type type); static JsonCodec<T> jsonCodec(Class<T> type); static JsonCodec<T> jsonCodec(TypeToken<T> type); static JsonCodec<List<T>> listJsonCodec(Class<T> type); static JsonCodec<List<T>> listJsonCodec(JsonCodec<T> type); static JsonCodec<Map<K, V>> mapJsonCodec(Class<K> keyType, Class<V> valueType); static JsonCodec<Map<K, V>> mapJsonCodec(Class<K> keyType, JsonCodec<V> valueType); JsonCodec<T> withoutPretty(); Type getType(); T fromJson(String json); String toJson(T instance); Optional<String> toJsonWithLengthLimit(T instance, int lengthLimit); T fromJson(byte[] json); byte[] toJsonBytes(T instance);  }
@Test public void testJsonCodec() { JsonCodec<Person> jsonCodec = jsonCodec(Person.class); Person.validatePersonJsonCodec(jsonCodec); }
@Test public void testTypeTokenList() { JsonCodec<List<Person>> jsonCodec = jsonCodec(new TypeToken<List<Person>>() {}); Person.validatePersonListJsonCodec(jsonCodec); }
@Test public void testTypeLiteralMap() { JsonCodec<Map<String, Person>> jsonCodec = jsonCodec(new TypeToken<Map<String, Person>>() {}); Person.validatePersonMapJsonCodec(jsonCodec); }
@Test public void testImmutableJsonCodec() { JsonCodec<ImmutablePerson> jsonCodec = jsonCodec(ImmutablePerson.class); ImmutablePerson.validatePersonJsonCodec(jsonCodec); }
@Test public void testImmutableTypeTokenList() { JsonCodec<List<ImmutablePerson>> jsonCodec = jsonCodec(new TypeToken<List<ImmutablePerson>>() {}); ImmutablePerson.validatePersonListJsonCodec(jsonCodec); }
@Test public void testImmutableTypeTokenMap() { JsonCodec<Map<String, ImmutablePerson>> jsonCodec = jsonCodec(new TypeToken<Map<String, ImmutablePerson>>() {}); ImmutablePerson.validatePersonMapJsonCodec(jsonCodec); }