use cesu8::{self, Cesu8DecodingError};
use std::borrow::Cow;
use std::slice;
pub fn to_java_string(string: &str) -> Vec<u8> {
let mut buffer = cesu8::to_java_cesu8(string).into_owned();
buffer.push(0);
buffer
}
#[cfg(test)]
mod to_java_string_tests {
use super::*;
#[test]
fn to() {
assert_eq!(
to_java_string("test"),
vec!['t' as u8, 'e' as u8, 's' as u8, 't' as u8, 0]
);
}
}
pub fn from_java_string(buffer: &[u8]) -> Result<Cow<str>, Cesu8DecodingError> {
cesu8::from_java_cesu8(unsafe {
slice::from_raw_parts(buffer.as_ptr() as *const u8, buffer.len() - 1)
})
}
#[cfg(test)]
mod from_java_string_tests {
use super::*;
#[test]
fn from() {
let buffer = vec!['t' as u8, 'e' as u8, 's' as u8, 't' as u8, 0];
assert_eq!(from_java_string(&buffer).unwrap(), "test");
}
#[test]
fn back_and_forth() {
let string = vec!['t' as u8, 'e' as u8, 's' as u8, 't' as u8, 0];
assert_eq!(to_java_string(&*from_java_string(&string).unwrap()), string);
}
#[test]
fn forth_and_back() {
let string = "test";
assert_eq!(from_java_string(&to_java_string(string)).unwrap(), string);
}
}