pub mod latin1;
pub mod utf16;
use anyhow::Result;
use self::utf16::Utf16;
#[derive(Debug, Clone)]
pub enum CompactEncoding {
Latin1,
Utf16,
}
impl CompactEncoding {
pub fn coder(&self) -> u8 {
match self {
CompactEncoding::Latin1 => 0,
CompactEncoding::Utf16 => 1,
}
}
pub fn from_coder(coder: u8) -> Self {
match coder {
0 => CompactEncoding::Latin1,
1 => CompactEncoding::Utf16,
p => panic!("bogus coder {p}")
}
}
}
pub type EncodedString = (CompactEncoding, Vec<u8>);
pub trait EncodingFormat {
fn into_java(str: String) -> Result<Vec<u8>>;
fn from_java(str: Vec<u8>) -> Result<String>;
}
pub fn encode_string(str: String) -> Result<EncodedString> {
let encoded = Utf16::into_java(str)?;
Ok((CompactEncoding::Utf16, encoded))
}
pub fn decode_string(str: EncodedString) -> Result<String> {
let (encoding, data) = str;
match encoding {
CompactEncoding::Utf16 => Utf16::from_java(data),
CompactEncoding::Latin1 => unimplemented!(),
}
}