wreq 1.2.4 → 1.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/Cargo.lock +22 -19
  3. data/Cargo.toml +15 -2
  4. data/crates/wreq-util/.github/FUNDING.yml +15 -0
  5. data/crates/wreq-util/.github/ISSUE_TEMPLATE/bug_report.md +38 -0
  6. data/crates/wreq-util/.github/ISSUE_TEMPLATE/custom.md +10 -0
  7. data/crates/wreq-util/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  8. data/crates/wreq-util/.github/dependabot.yml +22 -0
  9. data/crates/wreq-util/.github/workflows/ci.yml +82 -0
  10. data/crates/wreq-util/.github/workflows/release-plz.yml +52 -0
  11. data/crates/wreq-util/.gitignore +24 -0
  12. data/crates/wreq-util/CHANGELOG.md +74 -0
  13. data/crates/wreq-util/Cargo.toml +94 -0
  14. data/crates/wreq-util/LICENSE +201 -0
  15. data/crates/wreq-util/README.md +62 -0
  16. data/crates/wreq-util/examples/emulate.rs +39 -0
  17. data/crates/wreq-util/examples/tower_delay.rs +191 -0
  18. data/crates/wreq-util/release-plz.toml +2 -0
  19. data/crates/wreq-util/rustfmt.toml +5 -0
  20. data/crates/wreq-util/src/emulate/compress.rs +85 -0
  21. data/crates/wreq-util/src/emulate/macros.rs +372 -0
  22. data/crates/wreq-util/src/emulate/profile/chrome/header.rs +74 -0
  23. data/crates/wreq-util/src/emulate/profile/chrome/http2.rs +65 -0
  24. data/crates/wreq-util/src/emulate/profile/chrome/tls.rs +153 -0
  25. data/crates/wreq-util/src/emulate/profile/chrome.rs +2028 -0
  26. data/crates/wreq-util/src/emulate/profile/firefox/header.rs +37 -0
  27. data/crates/wreq-util/src/emulate/profile/firefox/http2.rs +113 -0
  28. data/crates/wreq-util/src/emulate/profile/firefox/tls.rs +253 -0
  29. data/crates/wreq-util/src/emulate/profile/firefox.rs +518 -0
  30. data/crates/wreq-util/src/emulate/profile/okhttp.rs +241 -0
  31. data/crates/wreq-util/src/emulate/profile/opera/header.rs +29 -0
  32. data/crates/wreq-util/src/emulate/profile/opera/http2.rs +50 -0
  33. data/crates/wreq-util/src/emulate/profile/opera/tls.rs +97 -0
  34. data/crates/wreq-util/src/emulate/profile/opera.rs +299 -0
  35. data/crates/wreq-util/src/emulate/profile/safari/header.rs +59 -0
  36. data/crates/wreq-util/src/emulate/profile/safari/http2.rs +116 -0
  37. data/crates/wreq-util/src/emulate/profile/safari/tls.rs +177 -0
  38. data/crates/wreq-util/src/emulate/profile/safari.rs +222 -0
  39. data/crates/wreq-util/src/emulate/profile.rs +47 -0
  40. data/crates/wreq-util/src/emulate.rs +369 -0
  41. data/crates/wreq-util/src/lib.rs +14 -0
  42. data/crates/wreq-util/src/rand.rs +24 -0
  43. data/crates/wreq-util/src/tower/delay/future.rs +43 -0
  44. data/crates/wreq-util/src/tower/delay/layer.rs +201 -0
  45. data/crates/wreq-util/src/tower/delay/service.rs +190 -0
  46. data/crates/wreq-util/src/tower/delay.rs +98 -0
  47. data/crates/wreq-util/src/tower.rs +7 -0
  48. data/crates/wreq-util/tests/client.rs +153 -0
  49. data/crates/wreq-util/tests/emulate_chrome.rs +270 -0
  50. data/crates/wreq-util/tests/emulate_firefox.rs +92 -0
  51. data/crates/wreq-util/tests/emulate_okhttp.rs +46 -0
  52. data/crates/wreq-util/tests/emulate_opera.rs +113 -0
  53. data/crates/wreq-util/tests/emulate_safari.rs +151 -0
  54. data/crates/wreq-util/tests/support/mod.rs +55 -0
  55. data/crates/wreq-util/tests/support/server.rs +232 -0
  56. data/examples/emulate_request.rb +1 -1
  57. data/lib/wreq.rb +72 -45
  58. data/lib/wreq_ruby/body.rb +30 -9
  59. data/lib/wreq_ruby/client.rb +88 -55
  60. data/lib/wreq_ruby/cookie.rb +81 -21
  61. data/lib/wreq_ruby/emulate.rb +77 -7
  62. data/lib/wreq_ruby/error.rb +5 -7
  63. data/lib/wreq_ruby/header.rb +205 -114
  64. data/lib/wreq_ruby/http.rb +74 -0
  65. data/lib/wreq_ruby/response.rb +31 -3
  66. data/script/build_windows_gnu.ps1 +6 -0
  67. data/src/arch.rs +22 -0
  68. data/src/client/body/form.rs +2 -0
  69. data/src/client/body/json.rs +47 -14
  70. data/src/client/body/stream.rs +147 -43
  71. data/src/client/body.rs +11 -15
  72. data/src/client/param.rs +7 -7
  73. data/src/client/req.rs +87 -47
  74. data/src/client/resp.rs +23 -24
  75. data/src/client.rs +310 -230
  76. data/src/cookie.rs +280 -87
  77. data/src/emulate.rs +86 -50
  78. data/src/error.rs +198 -45
  79. data/src/extractor.rs +16 -76
  80. data/src/header.rs +318 -130
  81. data/src/http.rs +62 -33
  82. data/src/lib.rs +26 -20
  83. data/src/macros.rs +71 -46
  84. data/src/options.rs +284 -0
  85. data/src/rt.rs +22 -11
  86. data/src/serde/de/array_deserializer.rs +48 -0
  87. data/src/serde/de/array_enumerator.rs +59 -0
  88. data/src/serde/de/deserializer.rs +307 -0
  89. data/src/serde/de/enum_deserializer.rs +47 -0
  90. data/src/serde/de/hash_deserializer.rs +89 -0
  91. data/src/serde/de/number_deserializer.rs +51 -0
  92. data/src/serde/de/variant_deserializer.rs +101 -0
  93. data/src/serde/de.rs +33 -0
  94. data/src/serde/error.rs +146 -0
  95. data/src/serde/ser/enums.rs +14 -0
  96. data/src/serde/ser/map_serializer.rs +56 -0
  97. data/src/serde/ser/seq_serializer.rs +71 -0
  98. data/src/serde/ser/serializer.rs +194 -0
  99. data/src/serde/ser/struct_serializer.rs +106 -0
  100. data/src/serde/ser/struct_variant_serializer.rs +44 -0
  101. data/src/serde/ser/tuple_variant_serializer.rs +41 -0
  102. data/src/serde/ser.rs +18 -0
  103. data/src/serde/tests.rs +237 -0
  104. data/src/serde.rs +202 -0
  105. data/test/body_sender_test.rb +246 -0
  106. data/test/cookie_test.rb +211 -10
  107. data/test/header_test.rb +228 -192
  108. data/test/json_precision_test.rb +209 -0
  109. data/test/option_validation_test.rb +311 -0
  110. data/test/stream_test.rb +36 -0
  111. data/test/value_semantics_test.rb +238 -0
  112. metadata +77 -1
data/src/client/resp.rs CHANGED
@@ -9,10 +9,10 @@ use magnus::{Error, Module, RArray, RModule, Ruby, Value, scan_args::scan_args};
9
9
  use wreq::Uri;
10
10
 
11
11
  use crate::{
12
- client::body::{BodyReceiver, Json},
12
+ client::body::{json::Json, stream::BodyReceiver},
13
13
  cookie::Cookie,
14
- error::{memory_error, no_block_given_error, wreq_error_to_magnus},
15
- gvl::{self, nogvl},
14
+ error::{memory_error, no_block_given_error, wreq_error},
15
+ gvl,
16
16
  header::Headers,
17
17
  http::{StatusCode, Version},
18
18
  rt,
@@ -64,7 +64,7 @@ impl Response {
64
64
  }
65
65
 
66
66
  /// Internal method to get the wreq::Response, optionally streaming the body.
67
- fn response(&self, stream: bool) -> Result<wreq::Response, Error> {
67
+ fn response(&self, ruby: &Ruby, stream: bool) -> Result<wreq::Response, Error> {
68
68
  let build_response = |body: wreq::Body| -> wreq::Response {
69
69
  let mut response = HttpResponse::new(body);
70
70
  *response.version_mut() = self.version.into_ffi();
@@ -81,8 +81,9 @@ impl Response {
81
81
  Ok(build_response(body))
82
82
  } else {
83
83
  let bytes = rt::try_block_on(
84
+ ruby,
84
85
  BodyExt::collect(body).map_ok(|buf| buf.to_bytes()),
85
- wreq_error_to_magnus,
86
+ wreq_error,
86
87
  )?;
87
88
 
88
89
  self.body
@@ -103,7 +104,7 @@ impl Response {
103
104
  };
104
105
  }
105
106
 
106
- Err(memory_error())
107
+ Err(memory_error(ruby))
107
108
  }
108
109
  }
109
110
 
@@ -167,44 +168,42 @@ impl Response {
167
168
  }
168
169
 
169
170
  /// Get the response body as bytes.
170
- pub fn bytes(&self) -> Result<Bytes, Error> {
171
- let response = self.response(false)?;
172
- rt::try_block_on(response.bytes(), wreq_error_to_magnus)
171
+ pub fn bytes(ruby: &Ruby, rb_self: &Self) -> Result<Bytes, Error> {
172
+ let response = rb_self.response(ruby, false)?;
173
+ rt::try_block_on(ruby, response.bytes(), wreq_error)
173
174
  }
174
175
 
175
176
  /// Get the full response text given a specific encoding.
176
- pub fn text(&self, args: &[Value]) -> Result<String, Error> {
177
+ pub fn text(ruby: &Ruby, rb_self: &Self, args: &[Value]) -> Result<String, Error> {
177
178
  let args = scan_args::<(), (Option<String>,), (), (), (), ()>(args)?;
178
- let response = self.response(false)?;
179
+ let response = rb_self.response(ruby, false)?;
179
180
  match args.optional.0 {
180
181
  Some(encoding) => {
181
- rt::try_block_on(response.text_with_charset(encoding), wreq_error_to_magnus)
182
+ rt::try_block_on(ruby, response.text_with_charset(encoding), wreq_error)
182
183
  }
183
- None => rt::try_block_on(response.text(), wreq_error_to_magnus),
184
+ None => rt::try_block_on(ruby, response.text(), wreq_error),
184
185
  }
185
186
  }
186
187
 
187
188
  /// Get the response body as JSON.
188
189
  pub fn json(ruby: &Ruby, rb_self: &Self) -> Result<Value, Error> {
189
- let response = rb_self.response(false)?;
190
- let json = rt::try_block_on(response.json::<Json>(), wreq_error_to_magnus)?;
191
- serde_magnus::serialize(ruby, &json)
190
+ let response = rb_self.response(ruby, false)?;
191
+ let json = rt::try_block_on(ruby, response.json::<Json>(), wreq_error)?;
192
+ crate::serde::serialize(ruby, &json)
192
193
  }
193
194
 
194
195
  /// Yield response body chunks to the given Ruby block.
195
196
  pub fn chunks(ruby: &Ruby, rb_self: &Self) -> Result<(), Error> {
196
197
  if !ruby.block_given() {
197
- return Err(no_block_given_error());
198
+ return Err(no_block_given_error(ruby));
198
199
  }
199
200
 
200
- let receiver = nogvl(|| {
201
- rb_self
202
- .response(true)
203
- .map(wreq::Response::bytes_stream)
204
- .map(BodyReceiver::new)
205
- })?;
201
+ let receiver = rb_self
202
+ .response(ruby, true)
203
+ .map(wreq::Response::bytes_stream)
204
+ .map(BodyReceiver::new)?;
206
205
 
207
- while let Some(chunk) = receiver.next()? {
206
+ while let Some(chunk) = receiver.next(ruby)? {
208
207
  let _: Value = ruby.yield_value(chunk)?;
209
208
  }
210
209