async_mp4/types/
string.rs1use 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}