So I just found out something weird while learning and writing a tutorial for Rust,

    let body: &std::borrow::Cow<'_, str> = http_req.body();
    if buf_str.contains(&**body) {
        println!("Body is same in buf");

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


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


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 and