11package com .traveltime .slack .json
2+
23import com .traveltime .slack .dto .InteractiveMessage ._
34import com .traveltime .slack .dto .TextObject .{Mrkdwn , PlainText , TextType }
45import com .traveltime .slack .dto .{Button , ConfirmDialog , InteractiveMessage , TextObject }
@@ -37,7 +38,7 @@ object InteractiveMessageWrites {
3738 (__ \ " deny" ).write[TextObject ]
3839 )(unlift(ConfirmDialog .unapply))
3940
40- val buttonWrites : Writes [Button ] = (button : Button ) => JsObject (
41+ implicit val buttonWrites : Writes [Button ] = (button : Button ) => JsObject (
4142 Map (
4243 " type" -> Some (JsString (" button" )),
4344 " text" -> Some (textObjectWrites.writes(button.textObject)),
@@ -46,29 +47,31 @@ object InteractiveMessageWrites {
4647 " value" -> button.value.map(JsString ),
4748 " style" -> button.style.map(style => JsString (style.literal)),
4849 " confirm" -> button.confirm.map(confirmDialogWrites.writes)
49- ).collect{ case (key, Some (value)) => (key, value) }
50+ ).collect { case (key, Some (value)) => (key, value) }
5051 )
5152
52- val elementsWrites : Writes [Element ] = Writes [Element ] {
53- case e : Button => buttonWrites.writes(e)
53+ def actionsWrites [A : Writes ]: Writes [Actions [A ]] = (actions : Actions [A ]) => {
54+ val w = implicitly[Writes [A ]]
55+ JsObject (Map (
56+ " type" -> JsString (actions.blockType),
57+ " elements" -> JsArray (actions.elements.map(w.writes))
58+ ))
5459 }
5560
56- val actionsWrites : Writes [Actions ] = (actions : Actions ) => JsObject (Map (
57- " type" -> JsString (actions.blockType),
58- " elements" -> JsArray (actions.elements.map(elementsWrites.writes))
59- ))
60-
61- val dividerWrites : Writes [Divider .type ] = (_ : InteractiveMessage .Divider .type ) =>
61+ val dividerWrites : Writes [Divider .type ] = (_ : Divider .type ) =>
6262 JsObject (Map (" type" -> JsString (" divider" )))
6363
64- implicit val blockWrites : Writes [Block ] = Writes [Block ] {
64+ implicit def blockWrites [ A : Writes ] : Writes [Block [ A ]] = Writes [Block [ A ] ] {
6565 case b : Divider .type => dividerWrites.writes(b)
6666 case b : Section => sectionWrites.writes(b)
67- case b : Actions => actionsWrites.writes(b)
67+ case b : Actions [A ] =>
68+ val w = implicitly[Writes [A ]]
69+ actionsWrites(w).writes(b)
6870 }
6971
70- implicit val interactiveMessageWrites : Writes [InteractiveMessage ] = (
71- (__ \ " channel" ).write[String ].contramap[Channel ](_.id) and
72- (__ \ " blocks" ).write[Vector [Block ]]
73- )(unlift(InteractiveMessage .unapply))
72+ implicit def interactiveMessageWrites [A : Writes ]: Writes [InteractiveMessage [A ]] =
73+ (
74+ (__ \ " channel" ).write[String ].contramap[Channel ](_.id) and
75+ (__ \ " blocks" ).write[Vector [Block [A ]]]
76+ ) (unlift(InteractiveMessage .unapply[A ]))
7477}
0 commit comments