2015-10-07 10 views
0

Предположим, у меня есть 1 директива для аутентификации. И после проверки подлинности я хотел бы зарегистрироваться. Это то, что я до сих пор:Как вы устанавливаете различные директивы Spray в 1 директиву

get(...) { 
    myauthdirective() { v => 
    myloggingdirective(v) { 
     ... 
    } 
    } 
} 

Так что я хотел бы тайный, что к одной директиве вместо того, чтобы иметь 2 каждый раз, когда мне нужно для проверки подлинности.

Я попытался использовать плоскую карту, но это не работает, потому что аутентификация возвращает директиву1, а logRequestResponse возвращает директиву0.

// Does not work! 
authenticate(myAuthMagnet).flatMap { 
    case ca: returnType => logRequestResponse(LoggingMagnet(logme(ca))) 
} 

Таким образом, я попробовал его с картой, но, похоже, он не входит в мою магнитную функцию регистрации.

// Does not work either! 
authenticate(myAuthMagnet).map { 
    case ca: returnType => 
    logRequestResponse(LoggingMagnet(logme(ca))) // does not go into logme function for some reason 
    ca 
} 

Я также не могу вызвать logme напрямую, потому что мне нужны объекты запроса и ответа.

Есть ли способ создать новую директиву с 2 директивами, которые возвращают разные типы директив? Благодарю.

ответ

2

В вашей реализации отсутствует одна вещь. Вы должны указать значение после ведения журнала. Таким образом, реализация должна быть такой:

authenticate(myAuthMagnet).flatMap { 
    case ca: returnType => logRequestResponse(LoggingMagnet(logme(ca))) & provide(ca) 
}