1cdb3e2c8Sopenharmony_ci# OsStr Bytes
2cdb3e2c8Sopenharmony_ci
3cdb3e2c8Sopenharmony_ciThis crate allows interacting with the data stored by [`OsStr`] and
4cdb3e2c8Sopenharmony_ci[`OsString`], without resorting to panics or corruption for invalid UTF-8.
5cdb3e2c8Sopenharmony_ciThus, methods can be used that are already defined on [`[u8]`][slice] and
6cdb3e2c8Sopenharmony_ci[`Vec<u8>`].
7cdb3e2c8Sopenharmony_ci
8cdb3e2c8Sopenharmony_ciTypically, the only way to losslessly construct [`OsStr`] or [`OsString`] from
9cdb3e2c8Sopenharmony_cia byte sequence is to use `OsStr::new(str::from_utf8(bytes)?)`, which requires
10cdb3e2c8Sopenharmony_cithe bytes to be valid in UTF-8. However, since this crate makes conversions
11cdb3e2c8Sopenharmony_cidirectly between the platform encoding and raw bytes, even some strings invalid
12cdb3e2c8Sopenharmony_ciin UTF-8 can be converted.
13cdb3e2c8Sopenharmony_ci
14cdb3e2c8Sopenharmony_ci[![GitHub Build Status](https://github.com/dylni/os_str_bytes/workflows/build/badge.svg?branch=master)](https://github.com/dylni/os_str_bytes/actions?query=branch%3Amaster)
15cdb3e2c8Sopenharmony_ci
16cdb3e2c8Sopenharmony_ci## Usage
17cdb3e2c8Sopenharmony_ci
18cdb3e2c8Sopenharmony_ciAdd the following lines to your "Cargo.toml" file:
19cdb3e2c8Sopenharmony_ci
20cdb3e2c8Sopenharmony_ci```toml
21cdb3e2c8Sopenharmony_ci[dependencies]
22cdb3e2c8Sopenharmony_cios_str_bytes = "6.4"
23cdb3e2c8Sopenharmony_ci```
24cdb3e2c8Sopenharmony_ci
25cdb3e2c8Sopenharmony_ciSee the [documentation] for available functionality and examples.
26cdb3e2c8Sopenharmony_ci
27cdb3e2c8Sopenharmony_ci## Rust version support
28cdb3e2c8Sopenharmony_ci
29cdb3e2c8Sopenharmony_ciThe minimum supported Rust toolchain version depends on the platform:
30cdb3e2c8Sopenharmony_ci
31cdb3e2c8Sopenharmony_ci<table>
32cdb3e2c8Sopenharmony_ci    <tr>
33cdb3e2c8Sopenharmony_ci        <th>Target</th>
34cdb3e2c8Sopenharmony_ci        <th>Target Triple</th>
35cdb3e2c8Sopenharmony_ci        <th>Minimum Version</th>
36cdb3e2c8Sopenharmony_ci    </tr>
37cdb3e2c8Sopenharmony_ci    <tr>
38cdb3e2c8Sopenharmony_ci        <td>Fortanix</td>
39cdb3e2c8Sopenharmony_ci        <td><code>*-fortanix-*-sgx</code></td>
40cdb3e2c8Sopenharmony_ci        <td>nightly (<a href="https://doc.rust-lang.org/unstable-book/library-features/sgx-platform.html"><code>sgx_platform</code></a>)</td>
41cdb3e2c8Sopenharmony_ci    </tr>
42cdb3e2c8Sopenharmony_ci    <tr>
43cdb3e2c8Sopenharmony_ci        <td>HermitCore</td>
44cdb3e2c8Sopenharmony_ci        <td><code>*-*-hermit</code></td>
45cdb3e2c8Sopenharmony_ci        <td>1.57.0</td>
46cdb3e2c8Sopenharmony_ci    </tr>
47cdb3e2c8Sopenharmony_ci    <tr>
48cdb3e2c8Sopenharmony_ci        <td>SOLID</td>
49cdb3e2c8Sopenharmony_ci        <td><code>*-*-solid_asp3(-*)</code></td>
50cdb3e2c8Sopenharmony_ci        <td>1.57.0</td>
51cdb3e2c8Sopenharmony_ci    </tr>
52cdb3e2c8Sopenharmony_ci    <tr>
53cdb3e2c8Sopenharmony_ci        <td>Unix</td>
54cdb3e2c8Sopenharmony_ci        <td>Unix</td>
55cdb3e2c8Sopenharmony_ci        <td>1.57.0</td>
56cdb3e2c8Sopenharmony_ci    </tr>
57cdb3e2c8Sopenharmony_ci    <tr>
58cdb3e2c8Sopenharmony_ci        <td>WASI</td>
59cdb3e2c8Sopenharmony_ci        <td><code>*-wasi</code></td>
60cdb3e2c8Sopenharmony_ci        <td>1.57.0</td>
61cdb3e2c8Sopenharmony_ci    </tr>
62cdb3e2c8Sopenharmony_ci    <tr>
63cdb3e2c8Sopenharmony_ci        <td>WebAssembly</td>
64cdb3e2c8Sopenharmony_ci        <td><code>wasm32-*-unknown</code></td>
65cdb3e2c8Sopenharmony_ci        <td>1.57.0</td>
66cdb3e2c8Sopenharmony_ci    </tr>
67cdb3e2c8Sopenharmony_ci    <tr>
68cdb3e2c8Sopenharmony_ci        <td>Windows</td>
69cdb3e2c8Sopenharmony_ci        <td><code>*-*-windows-*</code></td>
70cdb3e2c8Sopenharmony_ci        <td>1.57.0</td>
71cdb3e2c8Sopenharmony_ci    </tr>
72cdb3e2c8Sopenharmony_ci    <tr>
73cdb3e2c8Sopenharmony_ci        <td>Xous</td>
74cdb3e2c8Sopenharmony_ci        <td><code>*-*-xous-*</code></td>
75cdb3e2c8Sopenharmony_ci        <td>unstable</td>
76cdb3e2c8Sopenharmony_ci    </tr>
77cdb3e2c8Sopenharmony_ci</table>
78cdb3e2c8Sopenharmony_ci
79cdb3e2c8Sopenharmony_ciMinor version updates may increase these version requirements. However, the
80cdb3e2c8Sopenharmony_ciprevious two Rust releases will always be supported. If the minimum Rust
81cdb3e2c8Sopenharmony_civersion must not be increased, use a tilde requirement to prevent updating this
82cdb3e2c8Sopenharmony_cicrate's minor version:
83cdb3e2c8Sopenharmony_ci
84cdb3e2c8Sopenharmony_ci```toml
85cdb3e2c8Sopenharmony_ci[dependencies]
86cdb3e2c8Sopenharmony_cios_str_bytes = "~6.4"
87cdb3e2c8Sopenharmony_ci```
88cdb3e2c8Sopenharmony_ci
89cdb3e2c8Sopenharmony_ci## License
90cdb3e2c8Sopenharmony_ci
91cdb3e2c8Sopenharmony_ciLicensing terms are specified in [COPYRIGHT].
92cdb3e2c8Sopenharmony_ci
93cdb3e2c8Sopenharmony_ciUnless you explicitly state otherwise, any contribution submitted for inclusion
94cdb3e2c8Sopenharmony_ciin this crate, as defined in [LICENSE-APACHE], shall be licensed according to
95cdb3e2c8Sopenharmony_ci[COPYRIGHT], without any additional terms or conditions.
96cdb3e2c8Sopenharmony_ci
97cdb3e2c8Sopenharmony_ci[COPYRIGHT]: https://github.com/dylni/os_str_bytes/blob/master/COPYRIGHT
98cdb3e2c8Sopenharmony_ci[documentation]: https://docs.rs/os_str_bytes
99cdb3e2c8Sopenharmony_ci[LICENSE-APACHE]: https://github.com/dylni/os_str_bytes/blob/master/LICENSE-APACHE
100cdb3e2c8Sopenharmony_ci[slice]: https://doc.rust-lang.org/std/primitive.slice.html
101cdb3e2c8Sopenharmony_ci[`OsStr`]: https://doc.rust-lang.org/std/ffi/struct.OsStr.html
102cdb3e2c8Sopenharmony_ci[`OsString`]: https://doc.rust-lang.org/std/ffi/struct.OsString.html
103cdb3e2c8Sopenharmony_ci[`Vec<u8>`]: https://doc.rust-lang.org/std/vec/struct.Vec.html
104