1module Sources.Services.Dropbox.Parser exposing (parseErrorResponse, parseTreeResponse)
2
3import Json.Decode exposing (..)
4import Sources.Processing exposing (Marker(..), TreeAnswer)
5
6
7
8-- TREE
9
10
11parseTreeResponse : String -> Marker -> TreeAnswer Marker
12parseTreeResponse response _ =
13 let
14 hasMore =
15 decodeString (field "has_more" bool) response
16
17 cursor =
18 decodeString (field "cursor" string) response
19
20 paths =
21 decodeString
22 (field "entries" <| list <| field "path_display" string)
23 response
24 in
25 { filePaths = Result.withDefault [] paths
26 , marker =
27 if Result.withDefault False hasMore then
28 InProgress (Result.withDefault "" cursor)
29
30 else
31 TheEnd
32 }
33
34
35
36-- Error
37
38
39parseErrorResponse : String -> Maybe String
40parseErrorResponse response =
41 response
42 |> decodeString (field "error_summary" string)
43 |> Result.toMaybe