Struct latin1str::Latin1String
source · #[repr(transparent)]pub struct Latin1String { /* private fields */ }
Expand description
An owned latin-1 encoded string
Implementations§
source§impl Latin1String
impl Latin1String
sourcepub fn encode(string: &str) -> Cow<'_, Latin1Str>
pub fn encode(string: &str) -> Cow<'_, Latin1Str>
Create a new instance from a rust string.
Note: This encodes any unavailable unicode codepoints as their equivalent HTML-Entity.
This is an implementation detail of the encoding_rs
crate and not really useful for this crate.
use latin1str::Latin1String;
assert_eq!(Latin1String::encode("Hello World!").as_bytes(), b"Hello World!");
assert_eq!(Latin1String::encode("Frühling").as_bytes(), b"Fr\xFChling");
sourcepub fn read_cstring<R: BufRead>(reader: &mut R) -> Result<Self, Error>
pub fn read_cstring<R: BufRead>(reader: &mut R) -> Result<Self, Error>
Create a new instance by reading from a BufRead
until a null terminator is found
or the end of the string is reached.
use std::io::{Read, Cursor};
use latin1str::Latin1String;
let bytes = b"Hello World!\0";
let mut cur = Cursor::new(bytes);
let s = Latin1String::read_cstring(&mut cur).unwrap();
assert_eq!(s.decode().as_ref(), "Hello World!");
assert_eq!(cur.read(&mut []).ok(), Some(0));
Methods from Deref<Target = Latin1Str>§
sourcepub fn as_bytes(&self) -> &[u8] ⓘ
pub fn as_bytes(&self) -> &[u8] ⓘ
Get the bytes of the string
let s = Latin1Str::from_bytes_until_nul(b"Hello World!");
assert_eq!(s.as_bytes(), b"Hello World!")
Examples found in repository?
src/lib.rs (line 190)
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266
fn to_owned(&self) -> Self::Owned {
Latin1String {
inner: self.as_bytes().into(),
}
}
}
impl Latin1Str {
/// Turns some bytes into a Latin1Str slice
///
/// ## Safety
///
/// The byte slice may not contain any null bytes
pub const unsafe fn from_bytes_unchecked(text: &[u8]) -> &Self {
&*(text as *const [u8] as *const Latin1Str)
}
/// Wrap all bytes before the first nul as a [`Latin1Str`]
///
/// This method will never fail
///
/// ```
/// # use latin1str::Latin1Str;
/// let s = Latin1Str::from_bytes_until_nul(b"Hello\0World!");
/// assert_eq!(s.as_bytes(), b"Hello");
/// let s = Latin1Str::from_bytes_until_nul(b"Hello World!");
/// assert_eq!(s.as_bytes(), b"Hello World!");
/// ```
pub fn from_bytes_until_nul(mut bytes: &[u8]) -> &Self {
if let Some(nullpos) = memchr(0, bytes) {
bytes = bytes.split_at(nullpos).0;
}
// SAFETY: if there was a nul in here, the if above would have removed it
unsafe { Self::from_bytes_unchecked(bytes) }
}
#[deprecated = "Use `from_bytes_until_nul` instead"]
/// Alias of [`Latin1Str::from_bytes_until_nul`]
pub fn new(bytes: &[u8]) -> &Self {
Self::from_bytes_until_nul(bytes)
}
/// Get the bytes of the string
///
/// ```
/// # use latin1str::Latin1Str;
/// let s = Latin1Str::from_bytes_until_nul(b"Hello World!");
/// assert_eq!(s.as_bytes(), b"Hello World!")
/// ```
pub const fn as_bytes(&self) -> &[u8] {
&self.inner
}
/// Get the bytes of the string
pub const fn len(&self) -> usize {
self.inner.len()
}
/// Check whether the str is empty
///
/// ```
/// # use latin1str::Latin1Str;
/// assert!(Latin1Str::from_bytes_until_nul(b"").is_empty());
/// assert!(!Latin1Str::from_bytes_until_nul(b"a").is_empty());
/// ```
pub const fn is_empty(&self) -> bool {
self.inner.is_empty()
}
/// Decode the string
///
/// ```
/// # use latin1str::Latin1Str;
/// let s = Latin1Str::from_bytes_until_nul(b"Fr\xFChling");
/// assert_eq!(s.decode().as_ref(), "Frühling");
/// ```
pub fn decode(&self) -> Cow<str> {
WINDOWS_1252.decode(self.as_bytes()).0
}
Trait Implementations§
source§impl Borrow<Latin1Str> for Latin1String
impl Borrow<Latin1Str> for Latin1String
source§impl Clone for Latin1String
impl Clone for Latin1String
source§fn clone(&self) -> Latin1String
fn clone(&self) -> Latin1String
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl Deref for Latin1String
impl Deref for Latin1String
source§impl From<&Latin1Str> for Latin1String
impl From<&Latin1Str> for Latin1String
source§fn from(src: &Latin1Str) -> Latin1String
fn from(src: &Latin1Str) -> Latin1String
Converts to this type from the input type.
source§impl Ord for Latin1String
impl Ord for Latin1String
source§fn cmp(&self, other: &Latin1String) -> Ordering
fn cmp(&self, other: &Latin1String) -> Ordering
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
source§impl PartialEq<&Latin1Str> for Latin1String
impl PartialEq<&Latin1Str> for Latin1String
source§impl PartialEq<Latin1Str> for Latin1String
impl PartialEq<Latin1Str> for Latin1String
source§impl PartialEq<Latin1String> for &Latin1Str
impl PartialEq<Latin1String> for &Latin1Str
source§fn eq(&self, other: &Latin1String) -> bool
fn eq(&self, other: &Latin1String) -> bool
This method tests for
self
and other
values to be equal, and is used
by ==
.source§impl PartialEq<Latin1String> for Latin1Str
impl PartialEq<Latin1String> for Latin1Str
source§fn eq(&self, other: &Latin1String) -> bool
fn eq(&self, other: &Latin1String) -> bool
This method tests for
self
and other
values to be equal, and is used
by ==
.source§impl PartialEq<Latin1String> for Latin1String
impl PartialEq<Latin1String> for Latin1String
source§fn eq(&self, other: &Latin1String) -> bool
fn eq(&self, other: &Latin1String) -> bool
This method tests for
self
and other
values to be equal, and is used
by ==
.source§impl PartialOrd<Latin1String> for Latin1String
impl PartialOrd<Latin1String> for Latin1String
source§fn partial_cmp(&self, other: &Latin1String) -> Option<Ordering>
fn partial_cmp(&self, other: &Latin1String) -> Option<Ordering>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for
self
and other
) and is used by the <=
operator. Read more