async_mp4/types/
string.rs

1use async_trait::async_trait;
2use crate::bytes_read::{Mp4Readable, ReadMp4};
3use crate::bytes_write::{Mp4Writable, WriteMp4};
4use crate::error::MP4Error;
5
6#[async_trait]
7impl Mp4Readable for String {
8    async fn read<R: ReadMp4>(reader: &mut R) -> Result<Self, MP4Error> {
9        let mut name = vec![];
10        loop {
11            match reader.read().await? {
12                0 => break,
13                it => name.push(it)
14            }
15        }
16        Ok(String::from_utf8(name)?)
17    }
18}
19
20impl Mp4Writable for String {
21    fn byte_size(&self) -> usize {
22        self.as_bytes().len() + 1
23    }
24
25    fn write<W: WriteMp4>(&self, writer: &mut W) -> Result<usize, MP4Error> {
26        let mut count = 0;
27        count += writer.write(self.as_bytes())?;
28        count += 0u8.write(writer)?;
29        Ok(count)
30    }
31}