use super::inner::utf8;
use crate::{
Charset,
CharsetCodec,
CharsetDecodeResult,
CharsetEncodeResult,
DecodeStatus,
Utf8,
};
#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
pub struct Utf8Codec;
impl Utf8Codec {
#[must_use]
#[inline]
pub const fn charset(self) -> Charset {
Charset::UTF_8
}
#[must_use]
#[inline]
pub const fn max_units_per_char(self) -> usize {
Utf8::MAX_UNITS_PER_CHAR
}
}
impl CharsetCodec for Utf8Codec {
type Unit = u8;
#[inline]
fn charset(&self) -> Charset {
Charset::UTF_8
}
#[inline]
fn max_units_per_char(&self) -> usize {
Utf8::MAX_UNITS_PER_CHAR
}
fn decode_one(&self, input: &[u8], index: usize) -> CharsetDecodeResult<DecodeStatus> {
utf8::decode_prefix(input, index)
}
fn encode_one(&self, ch: char, output: &mut [u8], index: usize) -> CharsetEncodeResult<usize> {
utf8::encode_char(ch, output, index)
}
}