use crate::Error;
use crate::ErrorCode;
use crate::{error::Result, reader::Position};
#[inline(always)]
pub(crate) fn from_utf8(data: &[u8]) -> Result<&str> {
match simdutf8::basic::from_utf8(data) {
Ok(ret) => Ok(ret),
Err(_) => {
from_utf8_compat(data)
}
}
}
#[cold]
fn from_utf8_compat(data: &[u8]) -> Result<&str> {
match simdutf8::compat::from_utf8(data) {
Ok(ret) => Ok(ret),
Err(err) => {
let position = Position::from_index(err.valid_up_to(), data);
Err(Error::new(
ErrorCode::InvalidUTF8,
position.line,
position.column,
))
}
}
}