esp-partition-table 0.1.3

Read/write ESP flash partition table
Documentation
use crate::{PartitionEntry, PartitionError};
use core::str;

pub fn name_trim(data: &[u8; PartitionEntry::MAX_NAME_LEN]) -> &[u8] {
    data.split(|c| *c == b'\0').next().unwrap_or(data.as_ref())
}

pub fn name_from(data: &[u8; PartitionEntry::MAX_NAME_LEN]) -> Result<&str, PartitionError> {
    str::from_utf8(name_trim(data)).map_err(|_| PartitionError::InvalidString)
}

pub fn name_into(
    data: &mut [u8; PartitionEntry::MAX_NAME_LEN],
    name: &str,
) -> Result<(), PartitionError> {
    let bytes = name.as_bytes();
    if bytes.len() > PartitionEntry::MAX_NAME_LEN {
        return Err(PartitionError::InvalidString);
    }
    let (head, tail) = data.split_at_mut(bytes.len());
    head.copy_from_slice(bytes);
    tail.fill(0);
    Ok(())
}