From 0783832d1c58f9463e85ed504fc0edbfaedc09c5 Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Thu, 3 Aug 2017 14:23:12 -0700 Subject: Add parser directives --- .../xyz/driver/pdsuicommon/http/Directives.scala | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/main/scala/xyz/driver/pdsuicommon/http/Directives.scala (limited to 'src/main/scala/xyz/driver/pdsuicommon/http') 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 -- cgit v1.2.3