Компилятор не может найти неявные значения, даже если я создал JsonProtocol

#scala #akka-http #spray-json #implicit-parameters

Вопрос:

Итак, у меня есть эта простая конечная точка поста, где должна произойти некоторая несогласованность

 post {
      path("/emails") {
        import package.model.impl.RegularEmailJsonSupport._
        entity(as[RegularEmail]) { regularEmail =>
          storeInboundEmails(regularEmail).runDB.attempt.unsafeRunSync()
     }
}
 

Это класс модели наряду с форматом протокола json, в котором я не очень уверен, что это правильно для поля EmailStatus

 case class RegularEmail(
    id: BigInt,
    timestamp: DateTime,
    senderEmailAddress: String,
    originalRecipientsAddresses: List[String],
    cc: List[String],
    subject: String,
    content: JsValue,
    customerNumber: Int,
    status: EmailStatus = EmailStatus.UNREAD,
    originalSenderEmailAddress: String,
    hasAttachments: Boolean = false
//metadata: Option[EmailMetadata]
) extends Email(
  id = id,
  timestamp = timestamp,
  senderEmailAddress = senderEmailAddress,
  originalRecipientsAddresses = originalRecipientsAddresses,
  cc = cc,
  subject = subject,
  content = content,
  status = status,
  hasAttachments = hasAttachments,
  sourceType = EmailSourceType.REGULAR //,
//metadata = metadata
) {
}

object RegularEmailJsonSupport extends DefaultJsonProtocol with SprayJsonSupport {
  implicit val eventDataFormat = jsonFormat1(DateTime.apply)
  implicit val statusFormat = jsonFormat1(EmailStatus.apply)
  implicit val EmailFormat = jsonFormat11(RegularEmail.apply)
}
 

И вот какие ошибки я получаю

 could not find implicit value for parameter um: akka.http.scaladsl.unmarshalling.FromRequestUnmarshaller


could not find implicit value for evidence parameter of type RegularEmailJsonSupport.JF[P1] (Cannot find JsonWriter or JsonFormat type class for P1)
[error]   implicit val statusFormat = jsonFormat1(EmailStatus.apply)
 

Я также вижу, что компилятор не жалуется на формат JSON для DateTime, так может ли эта проблема быть спровоцирована статусом электронной почты?

EmailStatus-это объект в абстрактном классе Email, который наследуется обычной почтой и выглядит следующим образом:

 object EmailStatus extends Enumeration {
  type EmailStatus = Value
  val READ, UNREAD, CLOSED = Value
}
 

Комментарии:

1. Вы видели этот пиар ? github.com/spray/spray-json/pull/336/files

2. Никогда такого не видел, хороший обходной путь, большое спасибо

3. Более эффективный анализ перечислений Scala с использованием spray-json находится здесь