Upickle: считывает атрибут, который может быть строкой или Int, как строку

#scala #upickle

#scala #upickle

Вопрос:

У меня есть поле, которое может поступать из rest api в виде строки или Int, но когда я его читаю, я всегда хочу прочитать его как строку, т. Е. Если оно поступает как Int, я хочу создать для него toString

     case class ZoneList(
        someField: Int,
        targetField: String
    )

    object ZoneList {
      implicit val rw: ReadWriter[ZoneList] = macroRW
    }
  

targetField это поле, о котором идет речь
Глядя на http://www.lihaoyi.com/upickle/#CustomPicklers , но все еще не думаю, что у меня достаточно дескриптора для запуска пользовательского средства выбора

Редактировать:

в итоге я сделал это

 implicit val anyToStringReader: Reader[Option[String]] =
    reader[ujson.Value].map[Option[String]] { j =>
      Try(j.toString()).toOption
    }
  

Было бы предпочтительнее, если бы я мог выделить только атрибут targetField, но в моем фактическом классе case много полей, и не думаю, что я смогу это сделать, а также использовать макрос по умолчанию. Если кто-нибудь знает, как, дайте мне знать

Ответ №1:

Решаемая лихаои в upickle gitter:

«если вы хотите выделить этот атрибут, присвойте ему новый тип, который является оболочкой вокруг строки параметров, и напишите свой инструмент выбора для этого типа»