Skip to main content

simple_config/
lib.rs

1#![doc = include_str!("../README.md")]
2
3mod de; pub use de::*;
4
5#[cfg(test)] mod tests;
6
7fn from_utf8(s: &[u8], mut location: Location) -> Result<&str, DeserializeError> {
8	std::str::from_utf8(s)
9		.map_err(|e| {
10			if let Some(last_newline_rev) = &s[..e.valid_up_to()].iter().rev().position(|c| *c == b'\n') {
11				let last_newline = e.valid_up_to() - last_newline_rev;
12				location.add_lines(s[..last_newline].iter().filter(|c| **c == b'\n').count());
13				location.add_columns(last_newline - e.valid_up_to());
14			} else {
15				location.add_columns(e.valid_up_to());
16			}
17			crate::DeserializeErrorKind::InvalidUtf8.at(location)
18		})
19}
20
21unsafe fn from_utf8_unchecked(s: &[u8]) -> &str {
22	debug_assert!(std::str::from_utf8(s).is_ok(), "Assumed string was valid UTF-8 {:?}", String::from_utf8_lossy(s));
23	std::str::from_utf8_unchecked(s)
24}