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 ()