1 package com.fasterxml.jackson.databind.ser.std;
2
3 import java.io.IOException;
4
5 import com.fasterxml.jackson.core.*;
6 import com.fasterxml.jackson.databind.JavaType;
7 import com.fasterxml.jackson.databind.JsonMappingException;
8 import com.fasterxml.jackson.databind.JsonSerializable;
9 import com.fasterxml.jackson.databind.SerializerProvider;
10 import com.fasterxml.jackson.databind.annotation.JacksonStdImpl;
11 import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
12 import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
13
14 /**
15  * Generic handler for types that implement {@link JsonSerializable}.
16  *<p>
17  * Note: given that this is used for anything that implements
18  * interface, cannot be checked for direct class equivalence.
19  */

20 @JacksonStdImpl
21 @SuppressWarnings("serial")
22 public class SerializableSerializer
23     extends StdSerializer<JsonSerializable>
24 {
25     public final static SerializableSerializer instance = new SerializableSerializer();
26
27     protected SerializableSerializer() { super(JsonSerializable.class); }
28
29     @Override
30     public boolean isEmpty(SerializerProvider serializers, JsonSerializable value) {
31         if (value instanceof JsonSerializable.Base) {
32             return ((JsonSerializable.Base) value).isEmpty(serializers);
33         }
34         return false;
35     }
36
37     @Override
38     public void serialize(JsonSerializable value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
39         value.serialize(gen, serializers);
40     }
41
42     @Override
43     public final void serializeWithType(JsonSerializable value, JsonGenerator gen, SerializerProvider serializers,
44             TypeSerializer typeSer) throws IOException {
45         value.serializeWithType(gen, serializers, typeSer);
46     }
47
48     @Override
49     public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType typeHint)
50         throws JsonMappingException
51     {
52         visitor.expectAnyFormat(typeHint);
53     }
54 }
55