packages feed

elm-websocket-1.0: src/Elm/Export/WebSocketSubscriber.hs

{-# LANGUAGE FlexibleContexts  #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeOperators     #-}

module Elm.Export.WebSocketSubscriber
  ( renderSubscriber
  ) where

import           Elm.Export.Common
import           Text.PrettyPrint.Leijen.Text

renderSubscriber :: RenderM ()
renderSubscriber = do
  require "WebSocket"
  require "Json.Decode exposing (Decoder, decodeString)"
  require "Result exposing (Result(..))"
  collectDeclaration . return $
    "listen : String -> Decoder a -> (Result String a -> msg) -> Sub msg" <$$>
    "listen host decoder tagger = " <$$>
    "    WebSocket.listen (\"ws://\" ++ host) (\\str -> decodeString decoder str |> tagger)" <$$>
    emptyline <$$>
    "send : String -> (a -> Json.Encode.Value) -> a -> Cmd msg" <$$>
    "send host encoder value =" <$$>
    "    WebSocket.send (\"ws://\" ++ host) (Json.Encode.encode 0 (encoder value))"