2017-03-27 2 views
0

많은 지시문 (예 : parameters)은 매우 편리한 마샬링 메커니즘을 제공합니다.akka-http 사용자 지정 PathMatcher

그러나 설명서에서 Path Matcher에 대한 유사한 DSL을 찾지 못했습니다. 나는 다음과 같은 I 무언가, 사용자 정의 비 정렬 화의 결과가 열거입니다 expecially에

implicit val userStatusUnmarshaller: FromStringUnmarshaller[UserStatus] = ??? 
val route = path("user"/Segment.as[UserStatus]) { status: UserStatus => 
    ... 
} 

, 적절한 Unmarshaller에 주어진 생각했다.

그들은 그런 식으로 줄 수 있지만 찾을 수 없거나 같은 것을 할 다른 방법이 있습니까?

답변

2

은 무엇에 대해 암시 적으로 뭔가 String => Option[T]을 요청 PathMatcher1[String]을 확장 반환해야합니다.

implicit class PimpedSegment(segment: PathMatcher1[String]) { 
    def as[T](implicit asT: String => Option[T]): PathMatcher1[T] = 
    segment.flatMap(asT) 
} 

예를 들어, 당신은 암시 적으로 JsonReader[T] 요구할 수 :

implicit class JsonSegment(segment: PathMatcher1[String]) { 
    def as[T: JsonReader]: PathMatcher1[T] = segment.flatMap { string => 
    Try(JsString(string).convertTo[T]).toOption 
    } 
} 

는 그 다음은 Segment.as[UserStatus]로 사용할 수 있습니다.

4

당신과 같이 UserStatus에 세그먼트를 flatMap 수 있습니다

Segment.flatMap(UserStatus.fromString) 

fromStringOption[UserStatus]

관련 문제