Skip to content
This repository was archived by the owner on Jan 20, 2025. It is now read-only.

Commit d33e8bb

Browse files
Converting serializer for FluentIterable
1 parent a76047e commit d33e8bb

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

src/main/java/com/fasterxml/jackson/datatype/guava/GuavaSerializers.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
package com.fasterxml.jackson.datatype.guava;
22

3+
import com.fasterxml.jackson.databind.ser.std.IterableSerializer;
4+
import com.fasterxml.jackson.databind.ser.std.StdDelegatingSerializer;
5+
import com.fasterxml.jackson.databind.type.TypeFactory;
6+
import com.fasterxml.jackson.databind.util.Converter;
7+
import com.fasterxml.jackson.databind.util.StdConverter;
38
import com.google.common.base.Optional;
49
import com.google.common.cache.CacheBuilder;
510
import com.google.common.cache.CacheBuilderSpec;
11+
import com.google.common.collect.FluentIterable;
612
import com.google.common.collect.Multimap;
713
import com.google.common.collect.Range;
814
import com.google.common.net.HostAndPort;
@@ -16,8 +22,19 @@
1622
import com.fasterxml.jackson.datatype.guava.ser.MultimapSerializer;
1723
import com.fasterxml.jackson.datatype.guava.ser.RangeSerializer;
1824

25+
import java.util.Iterator;
26+
1927
public class GuavaSerializers extends Serializers.Base
2028
{
29+
static class FluentConverter extends StdConverter<Object,Iterable<?>> {
30+
static final FluentConverter instance = new FluentConverter();
31+
32+
@Override
33+
public Iterable<?> convert(Object value) {
34+
return (Iterable<?>) value;
35+
}
36+
}
37+
2138
@Override
2239
public JsonSerializer<?> findSerializer(SerializationConfig config, JavaType type, BeanDescription beanDesc)
2340
{
@@ -40,6 +57,14 @@ public JsonSerializer<?> findSerializer(SerializationConfig config, JavaType typ
4057
if (CacheBuilderSpec.class.isAssignableFrom(raw) || CacheBuilder.class.isAssignableFrom(raw)) {
4158
return ToStringSerializer.instance;
4259
}
60+
// since 2.4.5
61+
if (FluentIterable.class.isAssignableFrom(raw)) {
62+
JavaType[] params = config.getTypeFactory().findTypeParameters(type, Iterable.class);
63+
JavaType vt = (params == null || params.length != 1) ?
64+
TypeFactory.unknownType() : params[0];
65+
JavaType delegate = config.getTypeFactory().constructParametricType(Iterable.class, vt);
66+
return new StdDelegatingSerializer(FluentConverter.instance, delegate, null);
67+
}
4368
return super.findSerializer(config, type, beanDesc);
4469
}
4570

0 commit comments

Comments
 (0)