ADTs What ‘s can be using
- Envelop errors these we need with ADT.
2. Choose to using ADT to represent value, instead of basic type would be much safer. If you ever compare value or declare value with string or an enumerable.
val results = objectIds.map(objectId => {
existingFiles.find(o => o.objectId == objectId) match {
case Some(o) if o.statusUpdate == “complete” => ???
case Some(o) if o.statusUpdate == “incomplete” => ???
}})
We can be surpassed with simple ADT to be able to safer.
sealed trait Status
object Status {
case object Complete extends Status
case object Fail extends Status
case object Incomplete extends Status
}
existingFiles.find(o => o.objectId == objectId) match {
case Some(o) if o.statusUpdate == Status.Complete =>
ValidFileUpload(o.objectId, o, UploadResult.Found)
case Some(o) if o.statusUpdate == Status.Incomplete=>
}
Other then, whenever need to increase more detail to each object . you can assigned special parameter.
sealed trait Status
object Status {
case object Complete(message: string, code: Int) extends Status
}