aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jakob@driver.xyz>2017-08-03 14:23:12 -0700
committerJakob Odersky <jakob@driver.xyz>2017-08-16 19:26:10 -0700
commit0783832d1c58f9463e85ed504fc0edbfaedc09c5 (patch)
tree2fd4fdf6a18476599eb5214bd1f2e6838fbf42a6
parenteb5e95e95714ce23705a0de0f4dd525a8efeafe2 (diff)
downloadrest-query-0783832d1c58f9463e85ed504fc0edbfaedc09c5.tar.gz
rest-query-0783832d1c58f9463e85ed504fc0edbfaedc09c5.tar.bz2
rest-query-0783832d1c58f9463e85ed504fc0edbfaedc09c5.zip
Add parser directives
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/http/Directives.scala31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/pdsuicommon/http/Directives.scala b/src/main/scala/xyz/driver/pdsuicommon/http/Directives.scala
new file mode 100644
index 0000000..bb6a9e3
--- /dev/null
+++ b/src/main/scala/xyz/driver/pdsuicommon/http/Directives.scala
@@ -0,0 +1,31 @@
+package xyz.driver.pdsuicommon.http
+
+import akka.http.scaladsl.server.Directive1
+import akka.http.scaladsl.server.Directives._
+import xyz.driver.pdsuicommon.parsers._
+import xyz.driver.pdsuicommon.db.{Pagination, Sorting, SearchFilterExpr}
+import scala.util._
+
+trait Directives {
+
+ val paginated: Directive1[Pagination] = parameters(('pageSize.as[Int], 'pageNumber.as[Int])).tmap {
+ case (size, number) => Pagination(size, number)
+ }
+
+ def sorted(validDimensions: Set[String]): Directive1[Sorting] = parameterSeq.flatMap{ params =>
+ SortingParser.parse(validDimensions, params) match {
+ case Success(sorting) => provide(sorting)
+ case Failure(ex) => failWith(ex)
+ }
+ }
+
+ val searchFiltered: Directive1[SearchFilterExpr] = parameterSeq.flatMap{ params =>
+ SearchFilterParser.parse(params) match {
+ case Success(sorting) => provide(sorting)
+ case Failure(ex) => failWith(ex)
+ }
+ }
+
+}
+
+object Directives extends Directives