feat(users/Profpatsch/blog): add rust-string-conversions note
Change-Id: I7bee585935e65660f6b25b88ed33f09775eb01a0 Reviewed-on: https://cl.tvl.fyi/c/depot/+/3088 Tested-by: BuildkiteCI Reviewed-by: Profpatsch <mail@profpatsch.de>
This commit is contained in:
parent
5e6685c689
commit
35aa79d14b
2 changed files with 58 additions and 4 deletions
|
@ -16,13 +16,16 @@ let
|
||||||
bins.lowdown "-s" "-Thtml" "-o" "$out" note
|
bins.lowdown "-s" "-Thtml" "-o" "$out" note
|
||||||
];
|
];
|
||||||
|
|
||||||
preventing-oom = renderNote "preventing-oom" ./notes/preventing-oom.md;
|
|
||||||
|
|
||||||
notes = [
|
notes = [
|
||||||
{
|
{
|
||||||
route = [ "notes" "preventing-oom" ];
|
route = [ "notes" "preventing-oom" ];
|
||||||
name = "Preventing OOM";
|
name = "Preventing OOM";
|
||||||
page = preventing-oom;
|
page = renderNote "preventing-oom" ./notes/preventing-oom.md;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
route = [ "notes" "rust-string-conversions" ];
|
||||||
|
name = "Converting between different String types in Rust";
|
||||||
|
page = renderNote "rust-string-conversions" ./notes/rust-string-conversions.md;
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -308,7 +311,6 @@ let
|
||||||
|
|
||||||
in depot.nix.utils.drvTargets {
|
in depot.nix.utils.drvTargets {
|
||||||
inherit
|
inherit
|
||||||
preventing-oom
|
|
||||||
router
|
router
|
||||||
notes-server
|
notes-server
|
||||||
split-stdin
|
split-stdin
|
||||||
|
|
52
users/Profpatsch/blog/notes/rust-string-conversions.md
Normal file
52
users/Profpatsch/blog/notes/rust-string-conversions.md
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
# Converting between different String types in Rust
|
||||||
|
|
||||||
|
```
|
||||||
|
let s: String = ...
|
||||||
|
let st: &str = ...
|
||||||
|
let u: &[u8] = ...
|
||||||
|
let b: [u8; 3] = b"foo"
|
||||||
|
let v: Vec<u8> = ...
|
||||||
|
let os: OsString = ...
|
||||||
|
let ost: OsStr = ...
|
||||||
|
|
||||||
|
From To Use Comment
|
||||||
|
---- -- --- -------
|
||||||
|
&str -> String String::from(st)
|
||||||
|
&str -> &[u8] st.as_bytes()
|
||||||
|
&str -> Vec<u8> st.as_bytes().to_owned() via &[u8]
|
||||||
|
|
||||||
|
String -> &str &s alt. s.as_str()
|
||||||
|
String -> &[u8] s.as_bytes()
|
||||||
|
String -> Vec<u8> s.into_bytes()
|
||||||
|
String -> OsString OsString::from(s)
|
||||||
|
|
||||||
|
&[u8] -> &str str::from_utf8(u).unwrap()
|
||||||
|
&[u8] -> String String::from_utf8(u).unwrap()
|
||||||
|
&[u8] -> Vec<u8> u.to_owned()
|
||||||
|
&[u8] -> &OsStr OsStr::from_bytes(u) use std::os::unix::ffi::OsStrExt;
|
||||||
|
|
||||||
|
[u8; 3] -> &[u8] &b[..] byte literal
|
||||||
|
[u8; 3] -> &[u8] "foo".as_bytes() alternative via utf8 literal
|
||||||
|
|
||||||
|
Vec<u8> -> &str str::from_utf8(&v).unwrap() via &[u8]
|
||||||
|
Vec<u8> -> String String::from_utf8(v)
|
||||||
|
Vec<u8> -> &[u8] &v
|
||||||
|
Vec<u8> -> OsString OsString::from_vec(v) use std::os::unix::ffi::OsStringExt;
|
||||||
|
|
||||||
|
&OsStr -> &str ost.to_str().unwrap()
|
||||||
|
&OsStr -> String ost.to_os_string().into_string() via OsString
|
||||||
|
.unwrap()
|
||||||
|
&OsStr -> Cow<str> ost.to_string_lossy() Unicode replacement characters
|
||||||
|
&OsStr -> OsString ost.to_os_string()
|
||||||
|
&OsStr -> &[u8] ost.as_bytes() use std::os::unix::ffi::OsStringExt;
|
||||||
|
|
||||||
|
OsString -> String os.into_string().unwrap() returns original OsString on failure
|
||||||
|
OsString -> &str os.to_str().unwrap()
|
||||||
|
OsString -> &OsStr os.as_os_str()
|
||||||
|
OsString -> Vec<u8> os.into_vec() use std::os::unix::ffi::OsStringExt;
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
Original source is [this document on Pastebin](https://web.archive.org/web/20190710121935/https://pastebin.com/Mhfc6b9i)
|
Loading…
Reference in a new issue