Я пытаюсь декодировать строку вида «5m» или «5s» или «5ms» в объекты типа FiniteDuration, которые соответственно составляют 5 минут, 5 секунд, 5 миллисекунд.
Я пытаюсь создать собственный декодер и кодер для проекта, который включает класс FiniteDuration.Кодировщик не проблема, поскольку он просто читает поля класса FiniteDuration и генерирует строку.Тем не менее, я испытываю трудности при написании декодера, и мне интересно, возможно ли вообще то, что я делаю.
FiniteDuration - это класс с конструктором следующим образом: FiniteDuration (length: Long, unit: TimeUnit).Scala поставляется с некоторым удобным синтаксическим сахаром, так что класс можно вызывать с использованием обозначений 5.minutes, 5.seconds или 5.milliseconds.В этом случае Scala позаботится о создании класса FiniteDuration для вас.
Идея состоит в том, чтобы преобразовать этот класс FiniteDuration в строку типа «5m», «5s» или «5ms», что легче дляглаза.
implicit val d2json: Encoder[FiniteDuration] = new Encoder[FiniteDuration] {
override def apply(a: FiniteDuration): Json = ???
}
implicit val json2d: Decoder[FiniteDuration] = new Decoder[FiniteDuration] {
override def apply(c: HCursor): Decoder.Result[FiniteDuration] = ???
}
Кодер У меня не должно быть проблем с написанием.Декодер более хитрый.Я не уверен, что делать, так как метод apply ожидает ввод типа HCursor.