57 lines
977 B
Elm
57 lines
977 B
Elm
module Avatar exposing (Avatar, decoder, encode, src, toMaybeString)
|
|
|
|
import Asset
|
|
import Html exposing (Attribute)
|
|
import Html.Attributes
|
|
import Json.Decode as Decode exposing (Decoder)
|
|
import Json.Encode as Encode exposing (Value)
|
|
|
|
|
|
|
|
-- TYPES
|
|
|
|
|
|
type Avatar
|
|
= Avatar (Maybe String)
|
|
|
|
|
|
|
|
-- CREATE
|
|
|
|
|
|
decoder : Decoder Avatar
|
|
decoder =
|
|
Decode.map Avatar (Decode.nullable Decode.string)
|
|
|
|
|
|
|
|
-- TRANSFORM
|
|
|
|
|
|
encode : Avatar -> Value
|
|
encode (Avatar maybeUrl) =
|
|
case maybeUrl of
|
|
Just url ->
|
|
Encode.string url
|
|
|
|
Nothing ->
|
|
Encode.null
|
|
|
|
|
|
src : Avatar -> Attribute msg
|
|
src (Avatar maybeUrl) =
|
|
case maybeUrl of
|
|
Nothing ->
|
|
Asset.src Asset.defaultAvatar
|
|
|
|
Just "" ->
|
|
Asset.src Asset.defaultAvatar
|
|
|
|
Just url ->
|
|
Html.Attributes.src url
|
|
|
|
|
|
toMaybeString : Avatar -> Maybe String
|
|
toMaybeString (Avatar maybeUrl) =
|
|
maybeUrl
|