#string #concat #push

concat-in-place

Efficient macros for concatenation of strings and vectors

2 stable releases

1.1.0 Feb 27, 2022
1.0.0 Jan 27, 2020

#273 in Rust patterns

Download history 343/week @ 2022-06-03 193/week @ 2022-06-10 116/week @ 2022-06-17 110/week @ 2022-06-24 238/week @ 2022-07-01 176/week @ 2022-07-08 213/week @ 2022-07-15 136/week @ 2022-07-22 144/week @ 2022-07-29 187/week @ 2022-08-05 140/week @ 2022-08-12 150/week @ 2022-08-19 162/week @ 2022-08-26 123/week @ 2022-09-02 127/week @ 2022-09-09 98/week @ 2022-09-16

533 downloads per month

MIT/Apache

7KB
68 lines

concat-in-place

Crates.io Docs.rs

Provides efficient concatenation of strings and vectors

The goal of these macros are to reduce the amount of allocations that are required when concatenating string buffers and vectors; with a macro that makes it simple to achieve in practice.

Implementation Notes

  • The caller must provide a buffer for appending the slices to
  • The buffer is resized to accomodate the total length of all slices given

String Concatenation

Appends any number of string slices onto a string buffer

use concat_in_place::strcat;

let domain = "domain.com";
let endpoint = "inventory/parts";
let id = "10512";

let mut url = String::new();
let slice = strcat!(&mut url, domain "/" endpoint "/" id);
assert_eq!(slice, "domain.com/inventory/parts/10512");

Implementation Notes

Technically works with any string type that has the following methods:

  • capacity
  • len
  • push_str

Vector Concatenation

Appends any number of slices onto a vector

use concat_in_place::veccat;

let domain = b"domain.com";
let endpoint = b"inventory/parts";
let id = b"10512";

let mut url = Vec::new();
let slice = veccat!(&mut url, domain b"/" endpoint b"/" id);
assert_eq!(slice, b"domain.com/inventory/parts/10512");

Implementation Notes

Technically works with any type that has the following methods:

  • capacity
  • len
  • reserve
  • extend_from_slice

No runtime deps