HScD / src / Network / SoundCloud / Comment.hs

{-# LANGUAGE DeriveGeneric #-}

{- |
   Module:      Network.SoundCloud.Comment
   Copyright:   (c) 2012 Sebastián Ramírez Magrí <>
   License:     BSD3
   Maintainer:  Sebastián Ramírez Magrí <>
   Stability:   experimental

   Represents SoundCloud comments

module Network.SoundCloud.Comment where

import Data.Aeson (FromJSON, ToJSON, decode)
import qualified Data.ByteString.Lazy.Char8 as BSL
import GHC.Generics (Generic)

import qualified Network.SoundCloud.MiniUser as User

-- | Represents comment's JSON as a record
data JSON = JSON { id                     :: Int
                 , created_at             :: String
                 , body                   :: String
                 , timestamp              :: Maybe Int
                 , user                   :: User.JSON
                 , track_id               :: Int
                 } deriving (Show, Generic)

instance FromJSON JSON
instance ToJSON   JSON

-- | Decode a comment's valid JSON string into
-- a comment's 'JSON' record
decodeJSON :: String -> Maybe JSON
decodeJSON dat = decode (BSL.pack dat) :: Maybe JSON

-- | Show a summary about a comment
showComment :: JSON -> String
showComment c = concat ["\nAt ", created_at c, ", ", User.username $ user c, " said:\n", body c, "\n"]
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.