пока что примерно так и есть, но тогда может получиться, что сервис может быть вызван с неполным контекстом, например при обработке сообщений из кафки или чего-то такого. А хочется, чтобы на уровне типов это было невозможно. Но видимо защититься от этого нельзя, например если у меня сервис имплистно в конструкторе получает
F WithContext Ctx
, и я в нем же начинаю слушать сообщения из кафки, то там можно обратиться к этом Ctx, который неполноценный. Можно конечно там натыкать опшнов или ADT, но это будет боль. Пока что есть специальный "системный" контекст, который используется при старте и в UnsafeExecFuture:
object System extends SecurityContextLike {
override def correlationUuid: CorrelationUuid = fail("correlation id")
override def user: UserLike = fail("user")
override def company: CompanyLike = fail("company")
private def fail(method: String): Nothing =
throw new IllegalArgumentException(s"Cannot retrieve $method from system context")
}
Но это ненадежно.