Files
elm-0.19-workshop/intro/part6/src/Avatar.elm
2018-08-14 03:48:43 -04:00

64 lines
1.1 KiB
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
src : Avatar -> Attribute msg
src (Avatar maybeUrl) =
Html.Attributes.src <|
if maybeUrl == Just "" then
resolveAvatarUrl Nothing
else
resolveAvatarUrl maybeUrl
resolveAvatarUrl : Maybe String -> String
resolveAvatarUrl maybeUrl =
case maybeUrl of
Just url ->
url
Nothing ->
"https://static.productionready.io/images/smiley-cyrus.jpg"
encode : Avatar -> Value
encode (Avatar maybeUrl) =
case maybeUrl of
Just url ->
Encode.string url
Nothing ->
Encode.null
toMaybeString : Avatar -> Maybe String
toMaybeString (Avatar maybeUrl) =
maybeUrl