Пользовательские заголовки Akka HTTP: ошибка в документации или незнакомый синтаксис?

Я читаю эту часть документации Akka HTTP

В подразделе о пользовательских заголовках есть эти фрагменты кода:

final class ApiTokenHeader(token: String) extends ModeledCustomHeader[ApiTokenHeader] {
  override def renderInRequests = false
  override def renderInResponses = false
  override val companion = ApiTokenHeader
  override def value: String = token
}
object ApiTokenHeader extends ModeledCustomHeaderCompanion[ApiTokenHeader] {
  override val name = "apiKey"
  override def parse(value: String) = Try(new ApiTokenHeader(value))
}

и

val ApiTokenHeader(t1) = ApiTokenHeader("token")
t1 should ===("token")

Я считаю, что ApiTokenHeader должно быть case class вместо class, чтобы такое объявление значения с привязкой было действительным: val ApiTokenHeader(t1) = ApiTokenHeader("token")

Это правильно или я упускаю какие-то знания?


person Alexander Arendar    schedule 14.12.2017    source источник


Ответы (1)


Документация правильная. Причина, по которой ApiTokenHeader в примере работает так, как показано, заключается в том, что он расширяет ModeledCustomHeader, а его сопутствующий объект расширяет ModeledCustomHeaderCompanion. Реализация ModeledCustomHeader и ModeledCustomHeaderCompanion включает синтаксис в примере.

Из Скаладока для ModeledCustomHeader:

Класс поддержки для создания определяемых пользователем настраиваемых заголовков, определяемых реализацией имени и значения. Реализуя ModeledCustomHeader вместо CustomHeader напрямую, все необходимые методы unapply предоставляются для этого класса, так что его можно сопоставлять с образцом из RawHeader, а также наоборот.

Из Скаладока для ModeledCustomHeaderCompanion:

Для расширения сопутствующим объектом пользовательского заголовка, расширяющего ModeledCustomHeader. Реализует необходимые методы apply и unapply, чтобы такой определенный заголовок воспринимался как "родной".

Вы можете проверить исходный код для обоих здесь и ModeledCustomHeaderSpec (который использует ApiTokenHeader) здесь.

person Jeffrey Chung    schedule 14.12.2017
comment
Понятно. Спасибо. - person Alexander Arendar; 14.12.2017