MakerLabs ACM
requests.h
Go to the documentation of this file.
1 /*
2  * Copyright Paul Reimer, 2018
3  *
4  * This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 Unported License.
5  * To view a copy of this license, visit
6  * https://creativecommons.org/licenses/by-nc-sa/4.0/
7  * or send a letter to
8  * Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
9  */
10 
11 #pragma once
12 
13 #include "pid.h"
14 
15 #include "actor_model_generated.h"
16 
17 #include "requests_generated.h"
18 
19 #include <experimental/string_view>
20 #include <utility>
21 #include <vector>
22 
23 namespace Requests {
24 
25 using RequestPayloadFlatbuffer = flatbuffers::DetachedBuffer;
26 using ResponsePayloadFlatbuffer = flatbuffers::DetachedBuffer;
27 using RequestIntentFlatbuffer = flatbuffers::DetachedBuffer;
28 using RequestIntentFlatbufferRef = flatbuffers::BufferRef<RequestIntent>;
29 using MutableRequestIntentFlatbuffer = std::vector<uint8_t>;
30 
32  const std::vector<uint8_t>& payload
34 
36  const flatbuffers::DetachedBuffer& payload
38 
40  const std::experimental::string_view payload
42 
44  const UUID::UUID& request_id,
45  const std::vector<uint8_t>& payload
47 
49  const UUID::UUID& request_id,
50  const flatbuffers::DetachedBuffer& payload
52 
54  const UUID::UUID& request_id,
55  const std::experimental::string_view payload
57 
59  const std::experimental::string_view method,
61  const std::vector<
62  std::pair<std::experimental::string_view, std::experimental::string_view>
63  >& query = {},
64  const std::vector<
65  std::pair<std::experimental::string_view, std::experimental::string_view>
66  >& headers = {},
67  const std::experimental::string_view body = "",
68  const UUID::UUID& to_pid = UUID::NullUUID,
69  const ResponseFilter desired_format = ResponseFilter::FullResponseBody,
70  const std::experimental::string_view object_path = "",
71  const std::experimental::string_view root_type = "",
72  const std::experimental::string_view schema_text = "",
73  const bool include_headers = false,
74  const bool streaming = false
76 
77 // Update method:
79  MutableRequestIntentFlatbuffer& request_intent_mutable_buf,
81 ) -> bool;
82 
83 // Update URI:
84 auto set_request_uri(
85  MutableRequestIntentFlatbuffer& request_intent_mutable_buf,
87 ) -> bool;
88 
89 // Update/add header:
91  MutableRequestIntentFlatbuffer& request_intent_mutable_buf,
94 ) -> bool;
95 
96 // Update/add query string arg:
98  MutableRequestIntentFlatbuffer& request_intent_mutable_buf,
101 ) -> bool;
102 
103 // Update/add body:
104 auto set_request_body(
105  MutableRequestIntentFlatbuffer& request_intent_mutable_buf,
107 ) -> bool;
108 
109 // Verify Message matches type name, returns a Response*,
110 // and that Response matches the provided request id.
111 auto matches(
112  const ActorModel::Message& message,
114  const Response*& response,
115  const UUID::UUID& request_intent_id
116 ) -> bool;
117 
118 // Generate random request intent id, (optionally) set to_pid
120  MutableRequestIntentFlatbuffer& request_intent_mutable_buf,
121  const ActorModel::Pid& to_pid = ActorModel::Pid()
122 ) -> bool;
123 
124 // Return a vector of parsed bytes
126  const std::experimental::string_view req_fb,
127  const ActorModel::Pid& to_pid = ActorModel::Pid()
129 
130 // Extract the request intent ID from the bytes of a RequestIntent flatbuffer
132  const MutableRequestIntentFlatbuffer& request_intent_mutable_buf
133 ) -> const UUID::UUID;
134 
136  const RequestIntentFlatbuffer& request_intent_buf
137 ) -> const UUID::UUID;
138 
139 } // namespace Requests
auto set_request_method(MutableRequestIntentFlatbuffer &request_intent_mutable_buf, const string_view method) -> bool
Definition: requests.cpp:506
auto set_request_header(MutableRequestIntentFlatbuffer &request_intent_mutable_buf, const string_view k, const string_view v) -> bool
Definition: requests.cpp:248
Definition: requests.fbs:36
std::vector< uint8_t > MutableRequestIntentFlatbuffer
Definition: requests.h:29
flatbuffers::BufferRef< RequestIntent > RequestIntentFlatbufferRef
Definition: requests.h:28
root_type Message
Definition: actor_model.fbs:125
flatbuffers::DetachedBuffer RequestIntentFlatbuffer
Definition: requests.h:27
auto make_request_payload(const std::vector< uint8_t > &payload) -> RequestIntentFlatbuffer
Definition: requests.cpp:60
flatbuffers::DetachedBuffer RequestPayloadFlatbuffer
Definition: app_actor.cpp:36
auto set_request_query_arg(MutableRequestIntentFlatbuffer &request_intent_mutable_buf, const string_view k, const string_view v) -> bool
Definition: requests.cpp:347
flatbuffers::DetachedBuffer ResponsePayloadFlatbuffer
Definition: requests.h:26
std::experimental::string_view string_view
Definition: actor_model.cpp:16
UUID::UUID Pid
Definition: pid.h:19
auto update_request_intent_ids(MutableRequestIntentFlatbuffer &request_intent_mutable_buf, const ActorModel::Pid &to_pid) -> bool
Definition: requests.cpp:605
auto make_request_intent(const string_view method, const string_view uri, const std::vector< std::pair< string_view, string_view >> &query, const std::vector< std::pair< string_view, string_view >> &headers, const string_view body, const UUID &to_pid, const ResponseFilter desired_format, const string_view object_path, const string_view root_type, const string_view schema_text, const bool include_headers, const bool streaming) -> RequestIntentFlatbuffer
Definition: requests.cpp:152
auto set_request_body(MutableRequestIntentFlatbuffer &request_intent_mutable_buf, const string_view body) -> bool
Definition: requests.cpp:531
auto get_request_intent_id(const MutableRequestIntentFlatbuffer &request_intent_mutable_buf) -> const UUID
Definition: requests.cpp:641
Definition: curl_library_info.cpp:15
auto parse_request_intent(const std::experimental::string_view req_fb, const ActorModel::Pid &to_pid) -> MutableRequestIntentFlatbuffer
Definition: requests.cpp:626
ResponseFilter
Definition: requests.fbs:51
static UUID NullUUID
Definition: uuid.h:20
auto matches(const ActorModel::Message &message, const std::experimental::string_view type, const Response *&response, const UUID &request_intent_id) -> bool
Definition: requests.cpp:591
auto make_response_payload(const UUID &request_id, const std::vector< uint8_t > &payload) -> RequestIntentFlatbuffer
Definition: requests.cpp:103
UUID::UUID UUID
Definition: firmware_update_actor.cpp:41
auto set_request_uri(MutableRequestIntentFlatbuffer &request_intent_mutable_buf, const string_view uri) -> bool
Definition: requests.cpp:518