49 lines
1004 B
Elm
49 lines
1004 B
Elm
module Data.Article.Comment exposing (Comment, CommentId, commentIdDecoder, decoder, idToString)
|
|
|
|
import Data.Article.Author as Author exposing (Author)
|
|
import Date exposing (Date)
|
|
import Json.Decode as Decode exposing (Decoder)
|
|
import Json.Decode.Extra
|
|
import Json.Decode.Pipeline exposing (custom, decode, required)
|
|
|
|
|
|
type alias Comment =
|
|
{ id : CommentId
|
|
, body : String
|
|
, createdAt : Date
|
|
, updatedAt : Date
|
|
, author : Author
|
|
}
|
|
|
|
|
|
|
|
-- SERIALIZATION --
|
|
|
|
|
|
decoder : Decoder Comment
|
|
decoder =
|
|
decode Comment
|
|
|> required "id" commentIdDecoder
|
|
|> required "body" Decode.string
|
|
|> required "createdAt" Json.Decode.Extra.date
|
|
|> required "updatedAt" Json.Decode.Extra.date
|
|
|> required "author" Author.decoder
|
|
|
|
|
|
|
|
-- IDENTIFIERS --
|
|
|
|
|
|
type CommentId
|
|
= CommentId Int
|
|
|
|
|
|
idToString : CommentId -> String
|
|
idToString (CommentId id) =
|
|
toString id
|
|
|
|
|
|
commentIdDecoder : Decoder CommentId
|
|
commentIdDecoder =
|
|
Decode.map CommentId Decode.int
|