So I just found out something weird while learning and writing a tutorial for Rust,
let body: & Cow = http_req.body;
if buf_str.contains
So I found out that &**body
is possible because
body() -> &Cow -> deref -> Cow -> deref -> str (Size cannot be known at compile time)
therefore, add a reference -> & -> &str
OR
we can just use .deref
and since Cow already has Deref trait, it's actually a "double" deref like the previous explanation. However, there is a slight difference
OR
we can also just use .as_ref
since Cow has Deref trait and the .as_ref
method will reference the inferred type T self
which is String but since it's a ref so it's &String which is then coerced to &str because of String's Deref trait. See https://doc.rust-lang.org/stable/src/alloc/string.rs.html#2683 and https://doc.rust-lang.org/stable/src/alloc/string.rs.html#2479