stable_osstring_encoding/
lib.rs1#![warn(missing_docs, clippy::all)]
2#![doc = include_str!("../readme.md")]
3
4
5
6#[cfg(not(any(unix, windows)))]
7compile_error!(
8 "This crate currently only supports Windows and Unix (Linux and Macos). Adding support for your platform is likely very easy, please consider opening an issue for it in \"stable-osstring-encoding\"'s issue tracker."
9);
10
11
12
13use std::borrow::Cow;
14
15
16
17#[cfg(unix)]
19pub mod impl_unix;
20#[cfg(windows)]
22pub mod impl_windows;
23
24
25
26#[cfg(unix)]
28pub type EncodingWidth = u8;
29#[cfg(windows)]
31pub type EncodingWidth = u16;
32
33pub type StableOsString = Vec<EncodingWidth>;
35
36
37
38pub trait ToStableEncoding {
40 fn to_stable_encoding(&self) -> StableOsString;
42}
43
44pub trait IntoStableEncoding {
46 fn into_stable_encoding(self) -> StableOsString;
48}
49
50pub trait FromStableEncoding {
52 fn from_stable_encoding<'a>(encoded: impl Into<Cow<'a, [EncodingWidth]>>) -> Self;
54}
55
56
57
58#[cfg(test)]
59mod test {
60 use crate::{FromStableEncoding, IntoStableEncoding, ToStableEncoding};
61 use std::ffi::OsString;
62
63 #[test]
64 fn basics() {
65 let start = OsString::from("test");
66 let as_stable_1 = start.to_stable_encoding();
67 let as_stable_2 = start.into_stable_encoding();
68 assert_eq!(as_stable_1, as_stable_2);
69
70 let as_stable_1 = &*as_stable_1; let as_os_string_1 = OsString::from_stable_encoding(as_stable_1);
73 let as_os_string_2 = OsString::from_stable_encoding(as_stable_2);
74 assert_eq!(as_os_string_1, as_os_string_2);
75
76 let as_str = as_os_string_1.to_str();
77 assert_eq!(as_str, Some("test"));
78 }
79}