IzumiSy/elm-firestore/12.0.0

NOTE: the latest version is 13.0.0

Firestore.Codec

Codec for Firestore

type alias User =
    { name : String
    , age : Int
    }


codec : Codec.Codec User
codec =
    Codec.document User
        |> Codec.required "name" .name Codec.string
        |> Codec.required "age" .age Codec.int
        |> Codec.build


getDocument : Firestore.Firestore -> Cmd Msg
getDocument firestore =
    firestore
        |> Firestore.root
        |> Firestore.collection "users"
        |> Firestore.document "user0"
        |> Firestore.build
        |> ExResult.toTask
        |> Task.andThen (Firestore.get (Codec.asDecoder codec))
        |> Task.attempt GotDocument


insertDocument : Firestore.Firestore -> Cmd Msg
insertDocument firestore =
    firestore
        |> Firestore.root
        |> Firestore.collection "users"
        |> Firestore.build
        |> ExResult.toTask
        |> Task.andThen
            (Firestore.insert
                (Codec.asDecoder codec)
                (Codec.asEncoder codec { name = "thomas", age = 26 })
            )
        |> Task.attempt InsertedDocument

Definitions

type Codec a
asEncoder : Codec a -> a -> Encoder
encode : Codec a -> a -> Value
decode : Codec a -> Decoder a

Constructors

type Document a cons
document : cons -> Document a cons
build : Document a a -> Codec a
required : String -> (a -> b) -> Field b -> Document a (b -> cons) -> Document a cons
String
-> (a -> b)
-> Field b
-> b
-> Document a (b -> cons)
-> Document a cons

Field

type Field a
bool : Field Bool
bytes : Field String
int : Field Int
string : Field String
list : Field a -> Field (List a)
dict : Field a -> Field (Dict String a)
null : Field ()
maybe : Field a -> Field (Maybe a)

Advanced

map : (a -> b) -> (b -> a) -> Field a -> Field b
andThen : (a -> Field b) -> (b -> a) -> Field a -> Field b
succeed : a -> Field a
fail : String -> Field a
construct : Decoder a -> (a -> Encoder) -> Codec a