/* * Copyright (C) 2011,2012 Mathias Doenitz, Johannes Rudolph * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package spray.json trait ProductFormatsInstances { self: ProductFormats with StandardFormats => [# // Case classes with 1 parameters def jsonFormat1[[#P1 :JF#], T <: Product :ClassManifest](construct: ([#P1#]) => T): RootJsonFormat[T] = { val Array([#p1#]) = extractFieldNames(classManifest[T]) jsonFormat(construct, [#p1#]) } def jsonFormat[[#P1 :JF#], T <: Product](construct: ([#P1#]) => T, [#fieldName1: String#]): RootJsonFormat[T] = new RootJsonFormat[T]{ def write(p: T) = { val fields = new collection.mutable.ListBuffer[(String, JsValue)] fields.sizeHint(1 * 2) [#fields ++= productElement##2Field[P1](fieldName1, p, 0)# ] JsObject(fields: _*) } def read(value: JsValue) = { [#val p1V = fromField[P1](value, fieldName1)# ] construct([#p1V#]) } }# ] }