Function gix_config::value::normalize
source · pub fn normalize(input: Cow<'_, BStr>) -> Cow<'_, BStr>
Expand description
Removes quotes, if any, from the provided inputs, and transforms
the 3 escape sequences \n
, \t
and \b
into newline and tab
respectively, while \b
will remove the previous character.
It assumes the input contains a even number of unescaped quotes, and will unescape escaped quotes and everything else (even though the latter would have been rejected in the parsing stage).
The return values should be safe for value interpretation.
This has optimizations for fully-quoted values, where the returned value will be a borrowed reference if the only mutation necessary is to unquote the value.
This is the function used to normalize raw values from higher level abstractions. Generally speaking these high level abstractions will handle normalization for you, and you do not need to call this yourself. However, if you’re directly handling events from the parser, you may want to use this to help with value interpretation.
Generally speaking, you’ll want to use one of the variants of this function,
such as normalize_bstr
or normalize_bstring
.
§Examples
Values don’t need modification are returned borrowed, without allocation.
assert!(matches!(normalize_bstr("hello world"), Cow::Borrowed(_)));
Internally quoted values are turned into owned variant with quotes removed.
assert_eq!(normalize_bstr("hello \"world\""), Cow::<BStr>::Owned(BString::from("hello world")));
Escaped quotes are unescaped.
assert_eq!(normalize_bstr(r#"hello "world\"""#), Cow::<BStr>::Owned(BString::from(r#"hello world""#)));