Skip to content

Commit e68a8f4

Browse files
committed
builders don't borrow self
1 parent 9a1a816 commit e68a8f4

File tree

1 file changed

+24
-37
lines changed
  • sdk/core/typespec_client_core/src/http

1 file changed

+24
-37
lines changed

sdk/core/typespec_client_core/src/http/mod.rs

Lines changed: 24 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ impl<'a> QueryBuilder<'a> {
151151
///
152152
/// This is useful for boolean flags or markers in query strings that don't require a value.
153153
///
154-
/// Returns `&mut Self` to allow chaining multiple calls.
154+
/// Returns `Self` to allow chaining multiple calls.
155155
///
156156
/// # Examples
157157
///
@@ -165,7 +165,7 @@ impl<'a> QueryBuilder<'a> {
165165
/// .build();
166166
/// assert_eq!(url.as_str(), "https://contoso.com/?debug&a=1");
167167
/// ```
168-
pub fn append_key_only(&mut self, key: impl Into<std::borrow::Cow<'a, str>>) -> &mut Self {
168+
pub fn append_key_only(mut self, key: impl Into<std::borrow::Cow<'a, str>>) -> Self {
169169
let key = key.into();
170170

171171
if let Some((_, vals)) = self.values.iter_mut().find(|(k, _)| k == &key) {
@@ -186,7 +186,7 @@ impl<'a> QueryBuilder<'a> {
186186
/// `&'a str`, `String`, and `Cow<'a, str>`. This avoids unnecessary allocations when using
187187
/// string literals.
188188
///
189-
/// Returns `&mut Self` to allow chaining multiple calls.
189+
/// Returns `Self` to allow chaining multiple calls.
190190
///
191191
/// # Examples
192192
///
@@ -201,10 +201,10 @@ impl<'a> QueryBuilder<'a> {
201201
/// assert_eq!(url.as_str(), "https://contoso.com/?a=1&a=2&b=3");
202202
/// ```
203203
pub fn append_pair(
204-
&mut self,
204+
mut self,
205205
key: impl Into<std::borrow::Cow<'a, str>>,
206206
value: impl Into<std::borrow::Cow<'a, str>>,
207-
) -> &mut Self {
207+
) -> Self {
208208
let key = key.into();
209209
let value = value.into();
210210

@@ -227,7 +227,7 @@ impl<'a> QueryBuilder<'a> {
227227
/// `&'a str`, `String`, and `Cow<'a, str>`. This avoids unnecessary allocations when using
228228
/// string literals.
229229
///
230-
/// Returns `&mut Self` to allow chaining multiple calls.
230+
/// Returns `Self` to allow chaining multiple calls.
231231
///
232232
/// # Examples
233233
///
@@ -242,10 +242,10 @@ impl<'a> QueryBuilder<'a> {
242242
/// assert_eq!(url.as_str(), "https://contoso.com/?a=new_value&b=2&c=3");
243243
/// ```
244244
pub fn set_pair(
245-
&mut self,
245+
mut self,
246246
key: impl Into<std::borrow::Cow<'a, str>>,
247247
value: impl Into<std::borrow::Cow<'a, str>>,
248-
) -> &mut Self {
248+
) -> Self {
249249
let key = key.into();
250250
let value = value.into();
251251

@@ -415,87 +415,74 @@ mod test {
415415
#[test]
416416
fn test_query_builder_empty_query() {
417417
let mut url = Url::parse("https://contoso.com").unwrap();
418-
let mut builder = url.query_builder();
419-
builder.set_pair("a", "1");
420-
builder.build();
418+
url.query_builder().set_pair("a", "1").build();
421419
assert_eq!(url.as_str(), "https://contoso.com/?a=1");
422420
}
423421

424422
#[test]
425423
fn test_query_builder_new_parameter() {
426424
let mut url = Url::parse("https://contoso.com?b=2").unwrap();
427-
let mut builder = url.query_builder();
428-
builder.set_pair("a", "1");
429-
builder.build();
425+
url.query_builder().set_pair("a", "1").build();
430426
assert_eq!(url.as_str(), "https://contoso.com/?b=2&a=1");
431427
}
432428

433429
#[test]
434430
fn test_query_builder_overwrite_existing() {
435431
let mut url = Url::parse("https://contoso.com?a=1&b=2").unwrap();
436-
let mut builder = url.query_builder();
437-
builder.set_pair("a", "new_value");
438-
builder.build();
432+
url.query_builder().set_pair("a", "new_value").build();
439433
assert_eq!(url.as_str(), "https://contoso.com/?a=new_value&b=2");
440434
}
441435

442436
#[test]
443437
fn test_query_builder_overwrite_duplicate() {
444438
let mut url = Url::parse("https://contoso.com?a=1&b=2&a=3").unwrap();
445-
let mut builder = url.query_builder();
446-
builder.set_pair("a", "new_value");
447-
builder.build();
439+
url.query_builder().set_pair("a", "new_value").build();
448440
assert_eq!(url.as_str(), "https://contoso.com/?a=new_value&b=2");
449441
}
450442

451443
#[test]
452444
fn test_query_builder_preserves_order() {
453445
let mut url = Url::parse("https://contoso.com?x=1&a=old&y=2&z=3").unwrap();
454-
let mut builder = url.query_builder();
455-
builder.set_pair("a", "new");
456-
builder.build();
446+
url.query_builder().set_pair("a", "new").build();
457447
assert_eq!(url.as_str(), "https://contoso.com/?x=1&a=new&y=2&z=3");
458448
}
459449

460450
#[test]
461451
fn test_query_builder_with_special_chars() {
462452
let mut url = Url::parse("https://contoso.com?a=old").unwrap();
463-
let mut builder = url.query_builder();
464-
builder.set_pair("a", "hello world");
465-
builder.build();
453+
url.query_builder().set_pair("a", "hello world").build();
466454
assert_eq!(url.as_str(), "https://contoso.com/?a=hello+world");
467455
}
468456

469457
#[test]
470458
fn test_query_builder_multiple_sets() {
471459
let mut url = Url::parse("https://contoso.com?a=1&b=2").unwrap();
472-
let mut builder = url.query_builder();
473-
builder
460+
url.query_builder()
474461
.set_pair("a", "new")
475462
.set_pair("c", "3")
476-
.set_pair("b", "updated");
477-
builder.build();
463+
.set_pair("b", "updated")
464+
.build();
478465
assert_eq!(url.as_str(), "https://contoso.com/?a=new&b=updated&c=3");
479466
}
480467

481468
#[test]
482469
fn test_query_builder_with_numeric_value() {
483470
let mut url = Url::parse("https://contoso.com").unwrap();
484-
let mut builder = url.query_builder();
485-
builder.set_pair("foo", 1.to_string()).set_pair("bar", "2");
486-
builder.build();
471+
url.query_builder()
472+
.set_pair("foo", 1.to_string())
473+
.set_pair("bar", "2")
474+
.build();
487475
assert_eq!(url.as_str(), "https://contoso.com/?foo=1&bar=2");
488476
}
489477

490478
#[test]
491479
fn test_query_builder_append_key_only() {
492480
let mut url = Url::parse("https://contoso.com").unwrap();
493-
let mut builder = url.query_builder();
494-
builder
481+
url.query_builder()
495482
.append_key_only("debug")
496483
.append_pair("a", "1")
497-
.append_key_only("verbose");
498-
builder.build();
484+
.append_key_only("verbose")
485+
.build();
499486
assert_eq!(url.as_str(), "https://contoso.com/?debug&a=1&verbose");
500487
}
501488
}

0 commit comments

Comments
 (0)