ewvx/lib.rs
1//! Library for the EWVX (Ente Wurzel Video XML) format.
2//!
3//! Provides the data types, a v2.1 EWVX writer, and a v2.1 EWVX parser
4
5/// Data types representing an EWVX file.
6pub mod types;
7
8/// Typestate XML writer for the EWVX v2.0 format.
9///
10/// # Example
11/// ```
12/// use ewvx::types::EwvxMeta;
13/// use ewvx::writer::EwvxWriter;
14///
15/// let meta = EwvxMeta {
16/// title: None, author: None, created: None, description: None,
17/// fps: 24.0, width: 100, height: 100,
18/// frame_count: 1, duration: 1.0 / 24.0, ente: true,
19/// };
20///
21/// let buf = Vec::new();
22/// let mut w = EwvxWriter::new(buf, &meta).unwrap();
23/// w.write_frame(0, r#"<svg xmlns="http://www.w3.org/2000/svg"/>"#).unwrap();
24/// let mut w = w.end_frames().unwrap();
25/// let buf = w.finish().unwrap();
26///
27/// let output = String::from_utf8(buf).unwrap();
28/// assert!(output.contains(r#"ente-schema:ewvx:2.1"#));
29/// assert!(output.contains(r#"<frame index="0">"#));
30/// ```
31pub mod writer;
32
33/// XML reader for the EWVX v2.0 format.
34///
35/// # Example
36/// ```
37/// use ewvx::reader;
38///
39/// let xml = r#"<?xml version="1.0" encoding="UTF-8"?>
40/// <video xmlns="ente-schema:ewvx:2.1">
41/// <meta-ente>
42/// <fps>24.000000</fps>
43/// <width>100</width>
44/// <height>100</height>
45/// <frame-count>1</frame-count>
46/// <duration>0.041667</duration>
47/// <ente>true</ente>
48/// </meta-ente>
49/// <frames>
50/// <frame index="0">
51/// <svg xmlns="http://www.w3.org/2000/svg"/>
52/// </frame>
53/// </frames>
54/// </video>"#;
55///
56/// let data = reader::read(xml).unwrap();
57/// assert_eq!(data.meta.fps, 24.0);
58/// assert_eq!(data.meta.width, 100);
59/// assert_eq!(data.frames.len(), 1);
60/// assert_eq!(data.frames[0].index, 0);
61/// assert!(data.audio.is_empty());
62/// ```
63pub mod reader;