308 value(obj, name) match { |
319 value(obj, name) match { |
309 case Some(a: List[T]) => Some(a) |
320 case Some(a: List[T]) => Some(a) |
310 case _ => None |
321 case _ => None |
311 } |
322 } |
312 |
323 |
313 def array[A](obj: T, name: String, unapply: T => Option[A]): Option[List[A]] = |
324 def value_default[A](obj: T, name: String, unapply: T => Option[A], default: A): Option[A] = |
314 for { |
325 value(obj, name) match { |
315 a0 <- array(obj, name) |
326 case None => Some(default) |
316 a = a0.map(unapply(_)) |
327 case Some(json) => unapply(json) |
317 if a.forall(_.isDefined) |
328 } |
318 } yield a.map(_.get) |
|
319 |
329 |
320 def string(obj: T, name: String): Option[String] = |
330 def string(obj: T, name: String): Option[String] = |
321 value(obj, name, Value.String.unapply) |
331 value(obj, name, Value.String.unapply) |
|
332 def string_default(obj: T, name: String, default: String = ""): Option[String] = |
|
333 value_default(obj, name, Value.String.unapply, default) |
322 |
334 |
323 def double(obj: T, name: String): Option[Double] = |
335 def double(obj: T, name: String): Option[Double] = |
324 value(obj, name, Value.Double.unapply) |
336 value(obj, name, Value.Double.unapply) |
|
337 def double_default(obj: T, name: String, default: Double = 0.0): Option[Double] = |
|
338 value_default(obj, name, Value.Double.unapply, default) |
325 |
339 |
326 def long(obj: T, name: String): Option[Long] = |
340 def long(obj: T, name: String): Option[Long] = |
327 value(obj, name, Value.Long.unapply) |
341 value(obj, name, Value.Long.unapply) |
|
342 def long_default(obj: T, name: String, default: Long = 0): Option[Long] = |
|
343 value_default(obj, name, Value.Long.unapply, default) |
328 |
344 |
329 def int(obj: T, name: String): Option[Int] = |
345 def int(obj: T, name: String): Option[Int] = |
330 value(obj, name, Value.Int.unapply) |
346 value(obj, name, Value.Int.unapply) |
|
347 def int_default(obj: T, name: String, default: Int = 0): Option[Int] = |
|
348 value_default(obj, name, Value.Int.unapply, default) |
331 |
349 |
332 def bool(obj: T, name: String): Option[Boolean] = |
350 def bool(obj: T, name: String): Option[Boolean] = |
333 value(obj, name, Value.Boolean.unapply) |
351 value(obj, name, Value.Boolean.unapply) |
|
352 def bool_default(obj: T, name: String, default: Boolean = false): Option[Boolean] = |
|
353 value_default(obj, name, Value.Boolean.unapply, default) |
|
354 |
|
355 def list[A](obj: T, name: String, unapply: T => Option[A]): Option[List[A]] = |
|
356 value(obj, name, Value.List.unapply(_, unapply)) |
|
357 def list_default[A](obj: T, name: String, unapply: T => Option[A], default: List[A] = Nil) |
|
358 : Option[List[A]] = value_default(obj, name, Value.List.unapply(_, unapply), default) |
334 } |
359 } |