A music player that connects to your cloud/distributed storage.
at main 66 lines 1.5 kB view raw
1module Sources.Services.AmazonS3.Parser exposing (parseErrorResponse, parseTreeResponse) 2 3import Conditional exposing (..) 4import Sources.Processing exposing (Marker(..), TreeAnswer) 5import Xml.Decode exposing (..) 6 7 8 9-- TREE 10 11 12parseTreeResponse : String -> Marker -> TreeAnswer Marker 13parseTreeResponse response _ = 14 response 15 |> decodeString 16 (map2 17 (\f m -> { filePaths = f, marker = m }) 18 filePathsDecoder 19 markerDecoder 20 ) 21 |> Result.withDefault { filePaths = [], marker = TheEnd } 22 23 24filePathsDecoder : Decoder (List String) 25filePathsDecoder = 26 string 27 |> single 28 |> path [ "Key" ] 29 |> list 30 |> path [ "Contents" ] 31 32 33markerDecoder : Decoder Marker 34markerDecoder = 35 map2 36 (\a b -> 37 Maybe.withDefault 38 TheEnd 39 (Maybe.map2 40 (\isTruncated token -> 41 ifThenElse (isTruncated == "true") (InProgress token) TheEnd 42 ) 43 a 44 b 45 ) 46 ) 47 (maybe <| path [ "IsTruncated" ] <| single string) 48 (maybe <| path [ "NextContinuationToken" ] <| single string) 49 50 51 52-- ERROR 53 54 55parseErrorResponse : String -> Maybe String 56parseErrorResponse response = 57 response 58 |> decodeString errorMessagesDecoder 59 |> Result.toMaybe 60 61 62errorMessagesDecoder : Decoder String 63errorMessagesDecoder = 64 string 65 |> single 66 |> path [ "Message" ]