Skip to main content

maybe_valid/impls/
alloc_impls.rs

1use ::core::str::Utf8Error;
2
3use ::alloc::ffi::CString;
4use ::alloc::string::String;
5use ::alloc::vec::Vec;
6
7use crate::{CStrInvalidReason, IntoValidated, MaybeValidOwned, Validated};
8
9impl Validated for String {
10    type InvalidReason = Utf8Error;
11}
12
13impl IntoValidated<String> for Vec<u8> {
14    fn into_validated(self) -> MaybeValidOwned<String, Self> {
15        match String::from_utf8(self) {
16            Ok(v) => MaybeValidOwned::Valid(v),
17            Err(e) => {
18                let err = e.utf8_error();
19                MaybeValidOwned::Invalid(e.into_bytes(), err)
20            }
21        }
22    }
23}
24
25impl Validated for CString {
26    type InvalidReason = CStrInvalidReason;
27}
28
29impl IntoValidated<CString> for Vec<u8> {
30    fn into_validated(self) -> MaybeValidOwned<CString, Self> {
31        match CString::from_vec_with_nul(self) {
32            Ok(v) => MaybeValidOwned::Valid(v),
33            Err(e) => MaybeValidOwned::Invalid(e.into_bytes(), CStrInvalidReason::Unspecified),
34        }
35    }
36}