57 lines
947 B
Elm
57 lines
947 B
Elm
module Profile exposing (Profile, avatar, bio, decoder)
|
|
|
|
{-| A user's profile - potentially your own!
|
|
|
|
Contrast with Cred, which is the currently signed-in user.
|
|
|
|
-}
|
|
|
|
import Api
|
|
import Avatar exposing (Avatar)
|
|
import Http
|
|
import HttpBuilder exposing (RequestBuilder, withExpect)
|
|
import Json.Decode as Decode exposing (Decoder)
|
|
import Json.Decode.Pipeline exposing (required)
|
|
import Username exposing (Username)
|
|
import Viewer.Cred as Cred exposing (Cred)
|
|
|
|
|
|
|
|
-- TYPES
|
|
|
|
|
|
type Profile
|
|
= Profile Internals
|
|
|
|
|
|
type alias Internals =
|
|
{ bio : Maybe String
|
|
, avatar : Avatar
|
|
}
|
|
|
|
|
|
|
|
-- INFO
|
|
|
|
|
|
bio : Profile -> Maybe String
|
|
bio (Profile info) =
|
|
info.bio
|
|
|
|
|
|
avatar : Profile -> Avatar
|
|
avatar (Profile info) =
|
|
info.avatar
|
|
|
|
|
|
|
|
-- SERIALIZATION
|
|
|
|
|
|
decoder : Decoder Profile
|
|
decoder =
|
|
Decode.succeed Internals
|
|
|> required "bio" (Decode.nullable Decode.string)
|
|
|> required "image" Avatar.decoder
|
|
|> Decode.map Profile
|