diff options
author | Jakob Odersky <jakob@driver.xyz> | 2017-08-02 13:38:49 -0700 |
---|---|---|
committer | Jakob Odersky <jakob@driver.xyz> | 2017-08-16 19:26:10 -0700 |
commit | 985ee69beed836b97f3476306736d3f15ce37e1c (patch) | |
tree | 73a5ecb25c3162d574febe5d39cbb1fafaace699 /src/main/scala/xyz/driver/pdsuicommon/parsers/DimensionsParser.scala | |
parent | 322ea28ecf5ad5f65d3376f3e97e004d229d4736 (diff) | |
download | rest-query-985ee69beed836b97f3476306736d3f15ce37e1c.tar.gz rest-query-985ee69beed836b97f3476306736d3f15ce37e1c.tar.bz2 rest-query-985ee69beed836b97f3476306736d3f15ce37e1c.zip |
Add parsers to common
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuicommon/parsers/DimensionsParser.scala')
-rw-r--r-- | src/main/scala/xyz/driver/pdsuicommon/parsers/DimensionsParser.scala | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/pdsuicommon/parsers/DimensionsParser.scala b/src/main/scala/xyz/driver/pdsuicommon/parsers/DimensionsParser.scala new file mode 100644 index 0000000..147102b --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuicommon/parsers/DimensionsParser.scala @@ -0,0 +1,33 @@ +package xyz.driver.server.parsers + +import play.api.libs.json._ +import play.api.routing.sird._ +import xyz.driver.pdsuicommon.utils.WritesUtils + +import scala.util.{Failure, Success, Try} + +class Dimensions(private val xs: Set[String] = Set.empty) { + def contains(x: String): Boolean = xs.isEmpty || xs.contains(x) +} + +object DimensionsParser { + + private class DimensionsWrapper[T](dimensions: Dimensions)(implicit orig: Writes[T]) extends Writes[T] { + private val filteredWrites = WritesUtils.filterKeys[T](dimensions.contains) + override def writes(o: T): JsValue = filteredWrites.writes(o) + } + + def tryParse(queryString: QueryString): Try[Dimensions] = { + val rawDimensions = queryString.getOrElse("dimensions", Seq.empty) + rawDimensions match { + case Nil => Success(new Dimensions()) + + case x +: Nil => + val raw: Set[String] = x.split(",").view.map(_.trim).filter(_.nonEmpty).to[Set] + Success(new Dimensions(raw)) + + case xs => + Failure(new IllegalArgumentException(s"Dimensions are specified ${xs.size} times")) + } + } +} |