[
    {
        "name": "S3",
        "comment": " Pure Elm client for the [AWS Simple Storage Service](https://aws.amazon.com/s3/) (S3) or [Digital Ocean Spaces](https://developers.digitalocean.com/documentation/spaces/).\n\n\n# Types\n\n@docs Request\n\n\n# Turning a Request into a Task\n\n@docs send\n\n\n# Creating S3 requests\n\n@docs listKeys\n@docs getObject, getFullObject, getHeaders, getObjectWithHeaders\n@docs putHtmlObject, putPublicObject, putObject\n@docs deleteObject\n\n\n# Creating Body values\n\n@docs htmlBody, jsonBody, stringBody\n\n\n# Adding queries and headers to a request\n\n@docs addQuery, addHeaders\n\n\n# Reading accounts into Elm\n\n@docs readAccounts, decodeAccounts, accountDecoder\n\n\n# Low-level functions\n\n@docs objectPath, parserRequest, stringRequest, requestBodyResult\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "Request",
                "comment": " A request that can be turned into a Task by `S3.send`.\n\n`b` is an internal type that you will never care about.\n`a` is the type of the successful `Task` result from `S3.send`.\n\n",
                "args": [
                    "b",
                    "a"
                ],
                "type": "{ httpRequest : Request b, andThen : b -> Task Error a }"
            }
        ],
        "values": [
            {
                "name": "accountDecoder",
                "comment": " A `Decoder` for the `Account` type.\n",
                "type": "Decoder Account"
            },
            {
                "name": "addHeaders",
                "comment": " Add headers to a `Request`.\n",
                "type": "Query -> Request b a -> Request b a"
            },
            {
                "name": "addQuery",
                "comment": " Add query parameters to a `Request`.\n",
                "type": "Query -> Request b a -> Request b a"
            },
            {
                "name": "decodeAccounts",
                "comment": " Decode a JSON string encoding a list of `Account`s\n",
                "type": "String -> Result Error (List Account)"
            },
            {
                "name": "deleteObject",
                "comment": " Delete an S3 object.\n\nThe string resulting from a successful `send` isn't interesting.\n\n",
                "type": "Bucket -> Key -> Request String String"
            },
            {
                "name": "getFullObject",
                "comment": " Read an object and process the entire Http Response.\n\n    responseHeaders : Http.Response String -> Result String ( String, List ( String, String ) )\n    responseHeaders response =\n        Ok <| ( response.body, Dict.toList response.headers )\n\n    getObjectWithHeaders : Bucket -> Key -> Request ( String, List ( String, String ) )\n    getObjectWithHeaders bucket key =\n        getFullObject bucket key responseHeaders\n\n",
                "type": "Bucket -> Key -> (Response String -> Result String a) -> Request a a"
            },
            {
                "name": "getHeaders",
                "comment": " Do a HEAD request to get only an object's headers.\n",
                "type": "Bucket -> Key -> Request (List ( String, String )) (List ( String, String ))"
            },
            {
                "name": "getObject",
                "comment": " Read an S3 object.\n\nThe contents will be the successful result of the `Task` created by `S3.send`.\n\n",
                "type": "Bucket -> Key -> Request String String"
            },
            {
                "name": "getObjectWithHeaders",
                "comment": " Read an object with its HTTP response headers.\n",
                "type": "Bucket -> Key -> Request ( String, List ( String, String ) ) ( String, List ( String, String ) )"
            },
            {
                "name": "htmlBody",
                "comment": " Create an HTML body for `putObject` and friends.\n",
                "type": "String -> Body"
            },
            {
                "name": "jsonBody",
                "comment": " Create a JSON body for `putObject` and friends.\n",
                "type": "Value -> Body"
            },
            {
                "name": "listKeys",
                "comment": " Create a `Request` to list the keys for an S3 bucket.\n",
                "type": "Bucket -> Request String KeyList"
            },
            {
                "name": "objectPath",
                "comment": " Turn a bucket and a key into an object path.\n\n    \"/\" ++ bucket ++ \"/\" ++ key\n\n",
                "type": "Bucket -> Key -> String"
            },
            {
                "name": "parserRequest",
                "comment": " Low-level request creator.\n\n    stringRequest : Method -> String -> Body -> Request String String\n    stringRequest method url body =\n        parserRequest\n            method\n            url\n            body\n            requestBodyResult\n            Task.succeed\n\n",
                "type": "Method -> String -> Body -> (Response String -> Result String b) -> (b -> Task Error a) -> Request b a"
            },
            {
                "name": "putHtmlObject",
                "comment": " Write an Html string to S3, with public-read permission.\n\nThe string resulting from a successful `send` isn't interesting.\n\n",
                "type": "Bucket -> Key -> String -> Request String String"
            },
            {
                "name": "putObject",
                "comment": " Write an object to S3, with default permissions (private).\n\nThe string resulting from a successful `send` isn't interesting.\n\n",
                "type": "Bucket -> Key -> Body -> Request String String"
            },
            {
                "name": "putPublicObject",
                "comment": " Write an object to S3, with public-read permission.\n\nThe string resulting from a successful `send` isn't interesting.\n\n",
                "type": "Bucket -> Key -> Body -> Request String String"
            },
            {
                "name": "readAccounts",
                "comment": " Read JSON from a URL and turn it into a list of `Account`s.\n\nIf `Nothing` is passed for the first arg (the URL), will use the default of `\"accounts.json\"`.\n\nYou're not going to want to store the secret keys in this JSON in plain text anywhere but your development machine. I'll add support eventually for encryption of the accounts JSON.\n\nExample JSON (the `buckets` are used only by the example code):\n\n    [{\"name\": \"Digital Ocean\",\n      \"region\": \"nyc3\",\n      \"is-digital-ocean\": true,\n      \"access-key\": \"<20-character access key>\",\n      \"secret-key\": \"<40-character secret key>\",\n      \"buckets\": [\"bucket1\",\"bucket2\"]\n     },\n     {\"name\": \"Amazon S3\",\n      \"region\": \"us-east-1\",\n      \"access-key\": \"<20-character access key>\",\n      \"secret-key\": \"<40-character secret key>\",\n      \"buckets\": [\"bucket3\",\"bucket4\",\"bucket5\"]\n     }\n    ]\n\n",
                "type": "Maybe String -> Task Error (List Account)"
            },
            {
                "name": "requestBodyResult",
                "comment": " A parser for `parserRequest` that pulls the body out of the response as a string.\n",
                "type": "Response String -> Result String String"
            },
            {
                "name": "send",
                "comment": " Create a `Task` to send a signed request over the wire.\n",
                "type": "Account -> Request b a -> Task Error a"
            },
            {
                "name": "stringBody",
                "comment": " Create a body with any mimetype for `putObject` and friends.\n\n    stringBody \"text/html\" \"Hello, World!\"\n\n",
                "type": "Mimetype -> String -> Body"
            },
            {
                "name": "stringRequest",
                "comment": " Create a `Request` that returns its response body as a string.\n\n    getObject : Bucket -> Key -> Request String String\n    getObject bucket key =\n        stringRequest GET (objectPath bucket key) emptyBody\n\n",
                "type": "Method -> String -> Body -> Request String String"
            }
        ],
        "binops": []
    },
    {
        "name": "S3.Types",
        "comment": " Types for S3 module\n\n\n# Types\n\n@docs Error, Account\n@docs Bucket, Key, Mimetype\n@docs StorageClass, Owner, KeyInfo, KeyList\n@docs Query, QueryElement, CannedAcl\n\n\n# Functions\n\n@docs aclToString\n\n",
        "unions": [
            {
                "name": "CannedAcl",
                "comment": " Values for the XAmzAcl Query type.\n",
                "args": [],
                "cases": [
                    [
                        "AclPrivate",
                        []
                    ],
                    [
                        "AclPublicRead",
                        []
                    ],
                    [
                        "AclPublicReadWrite",
                        []
                    ],
                    [
                        "AclAwsExecRead",
                        []
                    ],
                    [
                        "AclAuthenticatedRead",
                        []
                    ],
                    [
                        "AclBucketOwnerRead",
                        []
                    ],
                    [
                        "AclBucketOwnerFullControl",
                        []
                    ],
                    [
                        "AclLogDeliveryWrite",
                        []
                    ]
                ]
            },
            {
                "name": "Error",
                "comment": " Errors returned from S3 operations\n\n`HttpError` is from the standard Elm `Http` module.\n\n`MalformedXmlError` denotes an error in parsing the raw XML returned by S3.\n\n`ParseError` denotes an error turning that parsed XML into an Elm object.\n\n`DecodeError` denotes a Decoder error in parsing S3 account info.\n\n",
                "args": [],
                "cases": [
                    [
                        "HttpError",
                        [
                            "Error"
                        ]
                    ],
                    [
                        "MalformedXmlError",
                        [
                            "String"
                        ]
                    ],
                    [
                        "ParseError",
                        [
                            "DecodeDetails"
                        ]
                    ],
                    [
                        "DecodeError",
                        [
                            "String"
                        ]
                    ]
                ]
            },
            {
                "name": "QueryElement",
                "comment": " An element of a `Query`, used for HTTP headers and query parameters.\n\n`AnyQuery` allows you to encode any key/value pair.\n\n`XAmzAcl` is used as a header with `S3.putObject`.\n\nThe others are used as query parameters with `S3.listKeys`.\n\n",
                "args": [],
                "cases": [
                    [
                        "AnyQuery",
                        [
                            "String",
                            "String"
                        ]
                    ],
                    [
                        "XAmzAcl",
                        [
                            "CannedAcl"
                        ]
                    ],
                    [
                        "Delimiter",
                        [
                            "String"
                        ]
                    ],
                    [
                        "Marker",
                        [
                            "String"
                        ]
                    ],
                    [
                        "MaxKeys",
                        [
                            "Int"
                        ]
                    ],
                    [
                        "Prefix",
                        [
                            "String"
                        ]
                    ]
                ]
            }
        ],
        "aliases": [
            {
                "name": "Account",
                "comment": " Information about an S3 account\n",
                "args": [],
                "type": "{ name : String, region : Maybe String, accessKey : String, secretKey : String, buckets : List String, isDigitalOcean : Bool }"
            },
            {
                "name": "Bucket",
                "comment": " The name of an S3 bucket.\n",
                "args": [],
                "type": "String"
            },
            {
                "name": "Key",
                "comment": " The name of an S3 key.\n",
                "args": [],
                "type": "String"
            },
            {
                "name": "KeyInfo",
                "comment": " Information about a single key returned from listing a bucket's contents.\n",
                "args": [],
                "type": "{ key : Key, lastModified : String, eTag : String, size : Int, storageClass : StorageClass, owner : Owner }"
            },
            {
                "name": "KeyList",
                "comment": " All the information returned from listing a bucket's contents.\n\nAn Elm encoding of the ListBucketResult XML element.\n\n",
                "args": [],
                "type": "{ name : String, prefix : Maybe String, marker : Maybe String, nextMarker : Maybe String, maxKeys : Int, isTruncated : Bool, keys : List KeyInfo }"
            },
            {
                "name": "Mimetype",
                "comment": " An HTTP mimetype, e.g. \"text/html\".\n",
                "args": [],
                "type": "String"
            },
            {
                "name": "Owner",
                "comment": " The owner of an object returned from listing a bucket's contents.\n",
                "args": [],
                "type": "{ id : String, displayName : String }"
            },
            {
                "name": "Query",
                "comment": " A list of `QueryElement`s.\n",
                "args": [],
                "type": "List QueryElement"
            },
            {
                "name": "StorageClass",
                "comment": " The StorageClass for a key returned from listing a bucket's contents.\n",
                "args": [],
                "type": "String"
            }
        ],
        "values": [
            {
                "name": "aclToString",
                "comment": " Convert a `CannedAcl` to a String.\n",
                "type": "CannedAcl -> String"
            }
        ],
        "binops": []
    }
]