RS.CLIPPY.STRING_LIT_AS_BYTES
Calling `as_bytes` on a string literal instead of using a byte string literal
This checker is a Clippy lint created by The Rust Project Contributors. The documentation shown here is a copy of the original documentation for: string_lit_as_bytes. Copyright ©2025 The Rust Team. All rights reserved.
What it does
Checks for the as_bytes method called on string literals
that contain only ASCII characters.
Why is this bad?
Byte string literals (e.g., b"foo") can be used
instead. They are shorter but less discoverable than as_bytes().
Known problems
"str".as_bytes() and the suggested replacement of b"str" are not
equivalent because they have different types. The former is &[u8]
while the latter is &[u8; 3]. That means in general they will have a
different set of methods and different trait implementations.
fn f(v: Vec<u8>) {}
f("...".as_bytes().to_owned()); // works
f(b"...".to_owned()); // does not work, because arg is [u8; 3] not Vec<u8>
fn g(r: impl std::io::Read) {}
g("...".as_bytes()); // works
g(b"..."); // does not work
The actual equivalent of "str".as_bytes() with the same type is not
b"str" but &b"str"[..], which is a great deal of punctuation and not
more readable than a function call.
Example
let bstr = "a byte string".as_bytes();
Use instead:
let bstr = b"a byte string";