# From OsStr
> **A macro to convert a &OsStr to a more useful types**
[](https://crates.io/crates/from-os-str)
[](https://crates.io/crates/from-os-str)


[](https://github.com/aj-bagwell/from-os-str/actions/workflows/ci.yml?query=branch%3Amaster)
Dual-licensed under Apache 2.0 or MIT
## About
A macro for trying to convert an &OsStr to another more usefull type
There are lots of ways to do that and this will pick the best via
[autoref based specialization](https://lukaskalbertodt.github.io/2019/12/05/generalized-autoref-based-specialization.html)
e.g. a `PathBuf` will be created via `From<OsString>` not `From<String>` so non UTF8 paths
will work.
It is most useful in other macros where you don't know the type you are converting to.
## Example
```rust
use from_os_str::*;
use std::ffi::OsStr;
use std::path::Path;
let os_str = OsStr::new("123");
let path = try_from_os_str!(os_str as &Path);
assert_eq!(path, Ok(Path::new("123")));
let int = try_from_os_str!(os_str as u8);
assert_eq!(int, Ok(123));
```
## Conversion Methods
It will use one of the following traits (in order of preferece) to convert the `&OsStr` to the type you want.
* From<&OsStr>
* From<&Path>
* From<OsString>
* From<&str>
* From<String>
* TryFrom<&OsStr>
* TryFrom<&str>
* FromStr