forked from playframework/playframework.com
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathModule.scala
More file actions
42 lines (34 loc) · 1.08 KB
/
Copy pathModule.scala
File metadata and controls
42 lines (34 loc) · 1.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package models.modules
import play.api.libs.json._
import play.api.libs.functional.syntax._
/**
* A module
*/
case class Module(
name: String,
fullname: String,
author: String,
authorId: String,
description: String,
homePage: String,
)
object Module {
given modulesWrites: Writes[Seq[(Module, Seq[Release])]] = {
given releaseWrites: Writes[Release] = (
(__ \ "isDefault").write[Boolean] ~
(__ \ "version").write[String] ~
(__ \ "matches").write[String]
).apply(r => (r.isDefault, r.version, r.frameworkMatch))
given moduleWrites: Writes[(Module, Seq[Release])] = (
(__ \ "name").write[String] ~
(__ \ "fullname").write[String] ~
(__ \ "versions").write[Seq[Release]]
).apply(m => (m._1.name, m._1.fullname, m._2))
(__ \ "modules").write(using Writes.iterableWrites2[(Module, Seq[Release]), Seq[(Module, Seq[Release])]])
}
}
/**
* A release of a module
*/
case class Release(version: String, date: java.util.Date, frameworkMatch: String, isDefault: Boolean)
case class ModuleId(id: Long) extends AnyVal