linux-video-core 0.1.1

Linux V4L2 device interfacing
Documentation
use crate::{Error, Result};

use core::str;
use std::io;

#[inline(always)]
pub fn invalid_input(msg: &'static str) -> Error {
    Error::new(io::ErrorKind::InvalidInput, msg)
}

#[inline(always)]
pub fn invalid_data(msg: &'static str) -> Error {
    Error::new(io::ErrorKind::InvalidData, msg)
}

#[inline(always)]
fn is_null(src: &u8) -> bool {
    *src == 0
}

#[inline(always)]
fn get_ascii(src: &[u8]) -> &[u8] {
    src.splitn(2, is_null).next().unwrap()
}

#[inline(always)]
pub fn check_str(src: &[u8]) -> Result<()> {
    str::from_utf8(get_ascii(src))
        .map_err(|_| invalid_data("Invalid UTF-8"))
        .map(|_| ())
}

#[inline(always)]
pub fn get_str(src: &[u8]) -> Result<&str> {
    str::from_utf8(get_ascii(src)).map_err(|_| invalid_data("Invalid UTF-8"))
}

#[inline(always)]
pub fn get_str_unchecked(src: &[u8]) -> &str {
    unsafe { str::from_utf8_unchecked(get_ascii(src)) }
}