mkv-element 0.2.0

A Matroska/WebM element reader and writer.
Documentation
use mkv_element::prelude::*;

#[test]
fn read_ebml() {
    use mkv_element::io::blocking_impl::*;
    let ebml_hex = [
        0x1a, 0x45, 0xDF, 0xA3, 0x93, 0x42, 0x82, 0x88, 0x6D, 0x61, 0x74, 0x72, 0x6F, 0x73, 0x6B,
        0x61, 0x42, 0x87, 0x81, 0x01, 0x42, 0x85, 0x81, 0x01,
    ];
    let mut ebml_hex = std::io::Cursor::new(ebml_hex);
    let ebml = Ebml::read_from(&mut ebml_hex).unwrap();
    let ebml_expected = Ebml {
        crc32: None,
        ebml_version: None,
        ebml_read_version: None,
        ebml_max_id_length: EbmlMaxIdLength(4),
        ebml_max_size_length: EbmlMaxSizeLength(8),
        doc_type: Some(DocType("matroska".to_string())),
        doc_type_version: Some(DocTypeVersion(1)),
        doc_type_read_version: Some(DocTypeReadVersion(1)),
        void: None,
    };
    assert_eq!(ebml, ebml_expected);
}

#[test]
fn write_ebml() {
    use mkv_element::io::blocking_impl::*;
    let ebml = Ebml {
        crc32: None,
        ebml_version: None,
        ebml_read_version: None,
        ebml_max_id_length: EbmlMaxIdLength(4),
        ebml_max_size_length: EbmlMaxSizeLength(8),
        doc_type: Some(DocType("matroska".to_string())),
        doc_type_version: Some(DocTypeVersion(1)),
        doc_type_read_version: Some(DocTypeReadVersion(1)),
        void: None,
    };
    let mut ebml_buf = Vec::new();
    ebml.write_to(&mut ebml_buf).unwrap();
    let ebml_read = Ebml::read_from(&mut &ebml_buf[..]).unwrap();
    assert_eq!(ebml, ebml_read);
}

#[cfg(feature = "tokio")]
mod tokio_tests {
    use mkv_element::io::tokio_impl::*;
    use mkv_element::prelude::*;

    #[tokio::test]
    async fn read_ebml_tokio() {
        let ebml_hex = [
            0x1a, 0x45, 0xDF, 0xA3, 0x93, 0x42, 0x82, 0x88, 0x6D, 0x61, 0x74, 0x72, 0x6F, 0x73,
            0x6B, 0x61, 0x42, 0x87, 0x81, 0x01, 0x42, 0x85, 0x81, 0x01,
        ];
        let mut ebml_hex = std::io::Cursor::new(ebml_hex);
        let ebml = Ebml::async_read_from(&mut ebml_hex).await.unwrap();
        let ebml_expected = Ebml {
            crc32: None,
            ebml_version: None,
            ebml_read_version: None,
            ebml_max_id_length: EbmlMaxIdLength(4),
            ebml_max_size_length: EbmlMaxSizeLength(8),
            doc_type: Some(DocType("matroska".to_string())),
            doc_type_version: Some(DocTypeVersion(1)),
            doc_type_read_version: Some(DocTypeReadVersion(1)),
            void: None,
        };
        assert_eq!(ebml, ebml_expected);
    }

    #[tokio::test]
    async fn write_ebml_tokio() {
        let ebml = Ebml {
            crc32: None,
            ebml_version: None,
            ebml_read_version: None,
            ebml_max_id_length: EbmlMaxIdLength(4),
            ebml_max_size_length: EbmlMaxSizeLength(8),
            doc_type: Some(DocType("matroska".to_string())),
            doc_type_version: Some(DocTypeVersion(1)),
            doc_type_read_version: Some(DocTypeReadVersion(1)),
            void: None,
        };
        let mut ebml_buf = Vec::new();
        ebml.async_write_to(&mut ebml_buf).await.unwrap();
        let ebml_read = Ebml::async_read_from(&mut &ebml_buf[..]).await.unwrap();
        assert_eq!(ebml, ebml_read);
    }
}