Skip to content

Commit

Permalink
Simplify the hell out of some serializers.
Browse files Browse the repository at this point in the history
  • Loading branch information
codahale committed Jul 19, 2011
1 parent 1ce2975 commit 51dce64
Show file tree
Hide file tree
Showing 6 changed files with 10 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,8 @@ class CaseClassSerializer[A <: Product](klass: Class[_]) extends JsonSerializer[
val methodOpt = methods.get(field.getName)
val fieldValue: Object = methodOpt.map { _.invoke(value) }.getOrElse(field.get(value))
if (fieldValue != None) {
json.writeFieldName(methodOpt.map {_.getName}.getOrElse(field.getName))
if (fieldValue == null) {
provider.getNullValueSerializer.serialize(null, json, provider)
} else {
val serializer = provider.findValueSerializer(fieldValue.getClass, null)
serializer.serialize(fieldValue, json, provider)
}
val fieldName = methodOpt.map { _.getName }.getOrElse(field.getName)
provider.defaultSerializeField(fieldName, fieldValue, json)
}
}
json.writeEndObject()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,9 @@ import org.codehaus.jackson.map.annotate.JsonCachable
@JsonCachable
class EitherSerializer extends JsonSerializer[Either[_, _]] {
def serialize(value: Either[_, _], json: JsonGenerator, provider: SerializerProvider) {
val obj: Object = value match {
provider.defaultSerializeValue(value match {
case Left(o) => o.asInstanceOf[Object]
case Right(o) => o.asInstanceOf[Object]
}

val serializer = provider.findValueSerializer(obj.getClass, null)
serializer.serialize(obj, json, provider)
}, json)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,7 @@ class IterableSerializer extends JsonSerializer[Iterable[_]] {
def serialize(value: Iterable[_], json: JsonGenerator, provider: SerializerProvider) {
json.writeStartArray()
for (element <- value) {
if (element == null) {
provider.getNullValueSerializer.serialize(null, json, provider)
} else {
val obj = element.asInstanceOf[Object]
val serializer = provider.findValueSerializer(obj.getClass, null)
serializer.serialize(obj, json, provider)
}
provider.defaultSerializeValue(element, json)
}
json.writeEndArray()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,7 @@ class IteratorSerializer extends JsonSerializer[Iterator[_]] {
provider: SerializerProvider) {
json.writeStartArray()
for (element <- value) {
if (element == null) {
provider.getNullValueSerializer.serialize(null, json, provider)
} else {
val obj = element.asInstanceOf[Object]
val serializer = provider.findValueSerializer(obj.getClass, null)
serializer.serialize(obj, json, provider)
}
provider.defaultSerializeValue(element, json)
}
json.writeEndArray()
}
Expand Down
22 changes: 3 additions & 19 deletions src/main/scala/com/codahale/jerkson/ser/MapSerializer.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,14 @@ package com.codahale.jerkson.ser

import org.codehaus.jackson.JsonGenerator
import org.codehaus.jackson.map.{SerializerProvider, JsonSerializer}
import org.codehaus.jackson.map.`type`.TypeFactory
import org.codehaus.jackson.map.annotate.JsonCachable

@JsonCachable
class MapSerializer extends JsonSerializer[collection.Map[_ ,_]] {
def serialize(value: collection.Map[_,_], json: JsonGenerator, provider: SerializerProvider) {
def serialize(map: collection.Map[_,_], json: JsonGenerator, provider: SerializerProvider) {
json.writeStartObject()
for ((key, value) <- value) {
if (key == null) {
provider.getNullKeySerializer.serialize(null, json, provider)
} else {
provider.getKeySerializer(
TypeFactory.`type`(key.asInstanceOf[Object].getClass),
null
).serialize(key.asInstanceOf[Object], json, provider)
}

if (value == null) {
provider.getNullValueSerializer.serialize(null, json, provider)
} else {
val obj = value.asInstanceOf[Object]
val serializer = provider.findValueSerializer(obj.getClass, null)
serializer.serialize(obj, json, provider)
}
for ((key, value) <- map) {
provider.defaultSerializeField(key.toString, value, json)
}
json.writeEndObject()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,6 @@ import org.codehaus.jackson.map.annotate.JsonCachable
class OptionSerializer extends JsonSerializer[Option[_]] {
def serialize(value: Option[_], json: JsonGenerator,
provider: SerializerProvider) {
if (value.isDefined) {
val obj = value.get.asInstanceOf[Object]
val serializer = provider.findValueSerializer(obj.getClass, null)
serializer.serialize(obj, json, provider)
} else {
json.writeNull()
}
provider.defaultSerializeValue(value.orNull, json)
}
}

0 comments on commit 51dce64

Please sign in to comment.