-
Notifications
You must be signed in to change notification settings - Fork 23
Expand file tree
/
Copy pathrequest.lisp
More file actions
82 lines (78 loc) · 2.9 KB
/
request.lisp
File metadata and controls
82 lines (78 loc) · 2.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
(defpackage #:aws-sdk/request
(:use #:cl)
(:import-from #:aws-sdk/session
#:*session*)
(:import-from #:quri
#:url-encode-params
#:make-uri
#:render-uri)
(:export #:request
#:request-service
#:request-method
#:request-path
#:request-params
#:request-headers
#:request-payload
#:request-session
#:request-host
#:request-endpoint
#:request-signing-name))
(in-package #:aws-sdk/request)
(defparameter *global-service-endpoints* '("iam"
"globalaccelerator"
"cloudfront"
"networkmanager"
"organizations"
"route53"
"shield"
"waf"))
(defclass request ()
((service :initarg :service
:initform (error ":service is required")
:reader request-service)
(host-prefix :initarg :host-prefix
:initform nil
:reader request-host-prefix)
(global-host :initarg :global-host
:initform nil
:reader request-global-host)
(api-version :initarg :api-version
:initform (error ":api-version is required")
:reader request-api-version)
(operation :initarg :operation
:initform (error ":operation is required")
:reader request-operation)
(signing-name :initarg :signing-name
:initform nil
:reader request-signing-name)
(method :initarg :method
:initform (error ":method is required")
:reader request-method)
(path :initarg :path
:initform "/"
:accessor request-path)
(params :initarg :params
:initform nil
:accessor request-params)
(headers :initarg :headers
:initform nil
:accessor request-headers)
(payload :initarg :payload
:initform nil
:accessor request-payload)
(session :initarg :session
:initform *session*
:reader request-session)))
(defgeneric request-host (request region)
(:method ((req request) region)
(if (member (request-service req) *global-service-endpoints* :test #'string=)
(or (request-global-host req)
(format nil "~(~A~).amazonaws.com" (request-service req)))
(format nil "~(~A~).~(~A~).amazonaws.com" (request-host-prefix req) region))))
(defgeneric request-endpoint (request region)
(:method ((req request) region)
(with-slots (path params) req
(quri:render-uri
(quri:make-uri :scheme "https"
:host (request-host req region)
:path path)))))