Skip to content

Commit b7b7d7e

Browse files
sreeocijothomaslalitb
authored
remove dependency of urlencoding crate (#1615)
Co-authored-by: Cijo Thomas <cijo.thomas@gmail.com> Co-authored-by: Lalit Kumar Bhasin <lalit_fin@yahoo.com>
1 parent 5ef3fd3 commit b7b7d7e

File tree

3 files changed

+43
-3
lines changed

3 files changed

+43
-3
lines changed

opentelemetry/CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
## vNext
44

5+
### Removed
6+
- Remove `urlencoding` crate dependency. [#1613](https://github.com/open-telemetry/opentelemetry-rust/pull/1613)
7+
58
## v0.22.0
69

710
### Added

opentelemetry/Cargo.toml

-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ futures-sink = "0.3"
2626
once_cell = { workspace = true }
2727
pin-project-lite = { workspace = true, optional = true }
2828
thiserror = { workspace = true }
29-
urlencoding = "2.1.2"
3029

3130
[target.'cfg(all(target_arch = "wasm32", not(target_os = "wasi")))'.dependencies]
3231
js-sys = "0.3.63"

opentelemetry/src/baggage.rs

+40-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ use once_cell::sync::Lazy;
1919
use std::collections::{hash_map, HashMap};
2020
use std::fmt;
2121
use std::iter::FromIterator;
22-
use urlencoding::encode;
2322

2423
static DEFAULT_BAGGAGE: Lazy<Baggage> = Lazy::new(Baggage::default);
2524

@@ -282,10 +281,25 @@ impl FromIterator<KeyValueMetadata> for Baggage {
282281
}
283282
}
284283

284+
fn encode(s: &str) -> String {
285+
let mut encoded_string = String::with_capacity(s.len());
286+
287+
for byte in s.as_bytes() {
288+
match *byte {
289+
b'a'..=b'z' | b'A'..=b'Z' | b'0'..=b'9' | b'.' | b'-' | b'_' | b'~' => {
290+
encoded_string.push(*byte as char)
291+
}
292+
b' ' => encoded_string.push_str("%20"),
293+
_ => encoded_string.push_str(&format!("%{:02X}", byte)),
294+
}
295+
}
296+
encoded_string
297+
}
298+
285299
impl fmt::Display for Baggage {
286300
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
287301
for (i, (k, v)) in self.into_iter().enumerate() {
288-
write!(f, "{}={}", k, encode(&v.0.as_str()))?;
302+
write!(f, "{}={}", k, encode(v.0.as_str().as_ref()))?;
289303
if !v.1.as_str().is_empty() {
290304
write!(f, ";{}", v.1)?;
291305
}
@@ -473,6 +487,30 @@ mod tests {
473487
assert_eq!(baggage.len(), 0, "did not insert invalid key");
474488
}
475489

490+
#[test]
491+
fn test_ascii_values() {
492+
let string1 = "test_ 123";
493+
let string2 = "Hello123";
494+
let string3 = "This & That = More";
495+
let string4 = "Unicode: 😊";
496+
let string5 = "Non-ASCII: áéíóú";
497+
let string6 = "Unsafe: ~!@#$%^&*()_+{}[];:'\\\"<>?,./";
498+
let string7: &str = "🚀Unicode:";
499+
let string8 = "ΑΒΓ";
500+
501+
assert_eq!(encode(string1), "test_%20123");
502+
assert_eq!(encode(string2), "Hello123");
503+
assert_eq!(encode(string3), "This%20%26%20That%20%3D%20More");
504+
assert_eq!(encode(string4), "Unicode%3A%20%F0%9F%98%8A");
505+
assert_eq!(
506+
encode(string5),
507+
"Non-ASCII%3A%20%C3%A1%C3%A9%C3%AD%C3%B3%C3%BA"
508+
);
509+
assert_eq!(encode(string6), "Unsafe%3A%20~%21%40%23%24%25%5E%26%2A%28%29_%2B%7B%7D%5B%5D%3B%3A%27%5C%22%3C%3E%3F%2C.%2F");
510+
assert_eq!(encode(string7), "%F0%9F%9A%80Unicode%3A");
511+
assert_eq!(encode(string8), "%CE%91%CE%92%CE%93");
512+
}
513+
476514
#[test]
477515
fn insert_too_much_baggage() {
478516
// too many key pairs

0 commit comments

Comments
 (0)