github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/web/elm/src/Api.elm (about) 1 module Api exposing 2 ( Request 3 , expectJson 4 , get 5 , ignoreResponse 6 , paginatedGet 7 , post 8 , put 9 , request 10 , withJsonBody 11 ) 12 13 import Api.Endpoints exposing (Endpoint, toString) 14 import Api.Pagination exposing (parsePagination) 15 import Concourse 16 import Concourse.Pagination exposing (Page, Paginated) 17 import Http 18 import Json.Decode exposing (Decoder) 19 import Json.Encode 20 import Task exposing (Task) 21 import Url.Builder 22 23 24 type alias Request a = 25 { endpoint : Endpoint 26 , query : List Url.Builder.QueryParameter 27 , method : String 28 , headers : List Http.Header 29 , body : Http.Body 30 , expect : Http.Expect a 31 } 32 33 34 request : Request a -> Task Http.Error a 35 request { endpoint, method, headers, body, expect, query } = 36 Http.request 37 { method = method 38 , headers = headers 39 , url = endpoint |> toString query 40 , body = body 41 , expect = expect 42 , timeout = Nothing 43 , withCredentials = False 44 } 45 |> Http.toTask 46 47 48 get : Endpoint -> Request () 49 get endpoint = 50 { method = "GET" 51 , headers = [] 52 , endpoint = endpoint 53 , query = [] 54 , body = Http.emptyBody 55 , expect = ignoreResponse 56 } 57 58 59 paginatedGet : Endpoint -> Maybe Page -> Decoder a -> Request (Paginated a) 60 paginatedGet endpoint page decoder = 61 { method = "GET" 62 , headers = [] 63 , endpoint = endpoint 64 , query = Api.Pagination.params page 65 , body = Http.emptyBody 66 , expect = Http.expectStringResponse (parsePagination decoder) 67 } 68 69 70 post : Endpoint -> Concourse.CSRFToken -> Request () 71 post endpoint csrfToken = 72 { method = "POST" 73 , headers = [ Http.header Concourse.csrfTokenHeaderName csrfToken ] 74 , endpoint = endpoint 75 , query = [] 76 , body = Http.emptyBody 77 , expect = ignoreResponse 78 } 79 80 81 put : Endpoint -> Concourse.CSRFToken -> Request () 82 put endpoint csrfToken = 83 { method = "PUT" 84 , headers = [ Http.header Concourse.csrfTokenHeaderName csrfToken ] 85 , endpoint = endpoint 86 , query = [] 87 , body = Http.emptyBody 88 , expect = ignoreResponse 89 } 90 91 92 expectJson : Decoder b -> Request a -> Request b 93 expectJson decoder r = 94 { method = r.method 95 , headers = r.headers 96 , endpoint = r.endpoint 97 , query = r.query 98 , body = r.body 99 , expect = Http.expectJson decoder 100 } 101 102 103 withJsonBody : Json.Encode.Value -> Request a -> Request a 104 withJsonBody value r = 105 { r | body = Http.jsonBody value } 106 107 108 ignoreResponse : Http.Expect () 109 ignoreResponse = 110 Http.expectStringResponse <| always <| Ok ()