mirror of https://github.com/sbt/sbt.git
Merge pull request #63 from dwijnand/files-info-format
Find a way to give FilesInfo an implicit JsonFormat
This commit is contained in:
commit
b5541e48ad
|
|
@ -16,6 +16,19 @@ sealed trait PlainFileInfo extends FileInfo { def exists: Boolean }
|
||||||
|
|
||||||
sealed trait HashModifiedFileInfo extends HashFileInfo with ModifiedFileInfo
|
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 PlainFile(file: File, exists: Boolean) extends PlainFileInfo
|
||||||
private final case class FileModified(file: File, lastModified: Long) extends ModifiedFileInfo
|
private final case class FileModified(file: File, lastModified: Long) extends ModifiedFileInfo
|
||||||
private final case class FileHash(file: File, hash: List[Byte]) extends HashFileInfo
|
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])
|
final case class FilesInfo[F <: FileInfo] private (files: Set[F])
|
||||||
object FilesInfo {
|
object FilesInfo {
|
||||||
def empty[F <: FileInfo]: FilesInfo[F] = FilesInfo(Set.empty[F])
|
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 {
|
object FileInfo {
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ class FileInfoSpec extends UnitSpec {
|
||||||
val fileInfo: ModifiedFileInfo = FileModified(file, file.lastModified())
|
val fileInfo: ModifiedFileInfo = FileModified(file, file.lastModified())
|
||||||
val filesInfo = FilesInfo(Set(fileInfo))
|
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) = {
|
def assertRoundTrip[A: JsonWriter: JsonReader](x: A) = {
|
||||||
val jsonString: String = toJsonString(x)
|
val jsonString: String = toJsonString(x)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue