Last active
December 15, 2015 04:52
-
-
Save dbousamra/1c82b6b135a4b250d4ae to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.cammy.nvr.ws.messages | |
| import argonaut._, Argonaut._ | |
| import com.cammy.nvr.domain.dtos.{CameraStatusDto, DeviceStatusDto} | |
| import com.cammy.nvr.domain.manifest.VideoManifest | |
| sealed trait DeviceResponsePayload | |
| case class StatusResponseMessage(cameras: List[CameraStatusDto], device: DeviceStatusDto) extends DeviceResponsePayload | |
| case class VideoChunksPresenceResponseMessage(videoChunks: List[String]) extends DeviceResponsePayload | |
| case class VideoChunksUploadResponseMessage(manifest: VideoManifest) extends DeviceResponsePayload | |
| object DeviceResponsePayload { | |
| implicit lazy val CodecStatusResponseMessage: CodecJson[StatusResponseMessage] = | |
| casecodec2(StatusResponseMessage.apply, StatusResponseMessage.unapply)("cameras", "device") | |
| implicit lazy val CodecVideoChunksPresenceResponseMessage: CodecJson[VideoChunksPresenceResponseMessage] = | |
| casecodec1(VideoChunksPresenceResponseMessage.apply, VideoChunksPresenceResponseMessage.unapply)("chunks") | |
| implicit lazy val CodecVideoChunksUploadResponseMessage: CodecJson[VideoChunksUploadResponseMessage] = | |
| casecodec1(VideoChunksUploadResponseMessage.apply, VideoChunksUploadResponseMessage.unapply)("manifest") | |
| implicit lazy val CodecDeviceResponsePayload: CodecJson[DeviceResponsePayload] = CodecJson( | |
| m => { | |
| val payload = m match { | |
| case m: StatusResponseMessage => m.asJson | |
| case m: VideoChunksPresenceResponseMessage => m.asJson | |
| case m: VideoChunksUploadResponseMessage => m.asJson | |
| } | |
| Json("payload" -> payload) | |
| }, | |
| c => { | |
| val payload = (c --\ "payload") | |
| // this works. | |
| payload.as[StatusResponseMessage].map(identity) ||| payload.as[VideoChunksPresenceResponseMessage].map(identity) | |
| // this does not: | |
| // payload.as[StatusResponseMessage].map(identity) ||| payload.as[VideoChunksPresenceResponseMessage].map(identity) ||| payload.as[VideoChunksUploadResponseMessage].map(identity) | |
| } | |
| ) | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment