From 7f3e788642b1d3946fccc0e13d3c3121034d9d7d Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Mon, 7 Aug 2017 15:47:02 -0700 Subject: Add path matchers for custom id types --- src/main/scala/xyz/driver/pdsuicommon/http/Directives.scala | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (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 index 0fe1f73..7a6266f 100644 --- a/src/main/scala/xyz/driver/pdsuicommon/http/Directives.scala +++ b/src/main/scala/xyz/driver/pdsuicommon/http/Directives.scala @@ -3,7 +3,7 @@ package xyz.driver.pdsuicommon.http import akka.http.scaladsl.marshalling._ import akka.http.scaladsl.server.Directive1 import akka.http.scaladsl.server.Directives._ -import akka.http.scaladsl.server.Route +import akka.http.scaladsl.server.{PathMatcher1, PathMatchers} import akka.http.scaladsl.model._ import xyz.driver.core.rest.AuthorizedServiceRequestContext import xyz.driver.core.rest.ContextHeaders @@ -14,6 +14,7 @@ import xyz.driver.pdsuicommon.error.DomainError._ import xyz.driver.pdsuicommon.error.ErrorsResponse.ResponseError import xyz.driver.pdsuicommon.parsers._ import xyz.driver.pdsuicommon.db.{Pagination, Sorting, SearchFilterExpr} +import xyz.driver.pdsuicommon.domain._ import scala.util._ import scala.concurrent._ @@ -38,6 +39,15 @@ trait Directives { } } + def StringIdInPath[T]: PathMatcher1[StringId[T]] = + PathMatchers.Segment.map((id) => StringId(id.toString.toLowerCase)) + + def LongIdInPath[T]: PathMatcher1[LongId[T]] = + PathMatchers.LongNumber.map((id) => LongId(id)) + + def UuidIdInPath[T]: PathMatcher1[UuidId[T]] = + PathMatchers.JavaUUID.map((id) => UuidId(id)) + @annotation.implicitNotFound("An ApiExtractor of ${Reply} to ${Api} is required to complete service replies.") trait ApiExtractor[Reply, Api] extends PartialFunction[Reply, Api] object ApiExtractor { -- cgit v1.2.3