use super::error::MatError;
pub fn encode_utf16(s: &str) -> Vec<u16> {
let mut units = Vec::with_capacity(s.len());
units.extend(s.encode_utf16());
units
}
pub fn decode_utf16(units: &[u16]) -> Result<String, MatError> {
String::from_utf16(units).map_err(|e| MatError::Utf16Decode(e.to_string()))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn ascii_roundtrip() {
let s = "hello, MATLAB";
let units = encode_utf16(s);
assert_eq!(units.len(), s.len());
assert_eq!(decode_utf16(&units).unwrap(), s);
}
#[test]
fn non_bmp_roundtrip() {
let s = "tip: 💡";
let units = encode_utf16(s);
assert!(units.len() > s.chars().count());
assert_eq!(decode_utf16(&units).unwrap(), s);
}
#[test]
fn bad_utf16_is_error() {
let bad = [0xD83Du16];
assert!(matches!(decode_utf16(&bad), Err(MatError::Utf16Decode(_))));
}
}