mirror of https://github.com/sbt/sbt.git
Find a way to give FilesInfo an implicit JsonFormat
This commit is contained in:
parent
6527382a4e
commit
ac14fc8de8
|
|
@ -16,6 +16,19 @@ sealed trait PlainFileInfo extends FileInfo { def exists: Boolean }
|
|||
|
||||
sealed trait HashModifiedFileInfo extends HashFileInfo with ModifiedFileInfo
|
||||
|
||||
object HashFileInfo {
|
||||
implicit val format: JsonFormat[HashFileInfo] = FileInfo.hash.format
|
||||
}
|
||||
object ModifiedFileInfo {
|
||||
implicit val format: JsonFormat[ModifiedFileInfo] = FileInfo.lastModified.format
|
||||
}
|
||||
object PlainFileInfo {
|
||||
implicit val format: JsonFormat[PlainFileInfo] = FileInfo.exists.format
|
||||
}
|
||||
object HashModifiedFileInfo {
|
||||
implicit val format: JsonFormat[HashModifiedFileInfo] = FileInfo.full.format
|
||||
}
|
||||
|
||||
private final case class PlainFile(file: File, exists: Boolean) extends PlainFileInfo
|
||||
private final case class FileModified(file: File, lastModified: Long) extends ModifiedFileInfo
|
||||
private final case class FileHash(file: File, hash: List[Byte]) extends HashFileInfo
|
||||
|
|
@ -24,6 +37,9 @@ private final case class FileHashModified(file: File, hash: List[Byte], lastModi
|
|||
final case class FilesInfo[F <: FileInfo] private (files: Set[F])
|
||||
object FilesInfo {
|
||||
def empty[F <: FileInfo]: FilesInfo[F] = FilesInfo(Set.empty[F])
|
||||
|
||||
implicit def format[F <: FileInfo: JsonFormat]: JsonFormat[FilesInfo[F]] =
|
||||
project(_.files, (fs: Set[F]) => FilesInfo(fs))
|
||||
}
|
||||
|
||||
object FileInfo {
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ class FileInfoSpec extends UnitSpec {
|
|||
val fileInfo: ModifiedFileInfo = FileModified(file, file.lastModified())
|
||||
val filesInfo = FilesInfo(Set(fileInfo))
|
||||
|
||||
it should "round trip" in assertRoundTrip(filesInfo)(FileInfo.lastModified.formats, FileInfo.lastModified.formats)
|
||||
it should "round trip" in assertRoundTrip(filesInfo)
|
||||
|
||||
def assertRoundTrip[A: JsonWriter: JsonReader](x: A) = {
|
||||
val jsonString: String = toJsonString(x)
|
||||
|
|
|
|||
Loading…
Reference in New Issue