about summary refs log tree commit diff
path: root/src/block/extension/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/block/extension/mod.rs')
-rw-r--r--src/block/extension/mod.rs62
1 files changed, 33 insertions, 29 deletions
diff --git a/src/block/extension/mod.rs b/src/block/extension/mod.rs
index 66a39b0..d0e57c6 100644
--- a/src/block/extension/mod.rs
+++ b/src/block/extension/mod.rs
@@ -1,39 +1,43 @@
+mod application;
 mod graphiccontrol;
 
 pub use graphiccontrol::{DisposalMethod, GraphicControl};
 
+pub use self::application::Application;
+
 pub enum Extension {
-	GraphicControl(GraphicControl),
-	Looping(u16)
-	// Comment
-	// Plain Text
-	// Generic Application
+    GraphicControl(GraphicControl),
+    Looping(u16),
+    Comment(Vec<u8>), // Plain Text
+    Application(Application),
 }
 
 impl From<&Extension> for Box<[u8]> {
-	fn from(ext: &Extension) -> Self {
-		let mut vec = vec![];
-		vec.push(0x21); // Push the extension introducer
+    fn from(ext: &Extension) -> Self {
+        let mut vec = vec![];
+        vec.push(0x21); // Push the extension introducer
 
-		match ext {
-			Extension::GraphicControl(gc) => {
-				vec.push(0xF9); // Graphic control label
-				vec.push(0x04); // Block size for this extension is always 4
-				vec.push(gc.packed);
-				vec.extend_from_slice(&gc.delay_time.to_le_bytes());
-				vec.push(gc.transparency_index);
-			},
-			Extension::Looping(count) => {
-				vec.push(0xFF); // Application extension label
-				vec.push(0x0B); // 11 bytes in this block
-				vec.extend_from_slice(b"NETSCAPE2.0"); // App. ident. and "auth code"
-				vec.push(0x03); // Sub-block length
-				vec.push(0x01); // Identifies netscape looping extension
-				vec.extend_from_slice(&count.to_le_bytes());
-			} 
-		}
+        match ext {
+            Extension::GraphicControl(gc) => {
+                vec.push(0xF9); // Graphic control label
+                vec.push(0x04); // Block size for this extension is always 4
+                vec.push(gc.packed);
+                vec.extend_from_slice(&gc.delay_time.to_le_bytes());
+                vec.push(gc.transparency_index);
+            }
+            Extension::Looping(count) => {
+                vec.push(0xFF); // Application extension label
+                vec.push(0x0B); // 11 bytes in this block
+                vec.extend_from_slice(b"NETSCAPE2.0"); // App. ident. and "auth code"
+                vec.push(0x03); // Sub-block length
+                vec.push(0x01); // Identifies netscape looping extension
+                vec.extend_from_slice(&count.to_le_bytes());
+            }
+            Extension::Comment(_) => todo!(),
+            Extension::Application(_) => todo!(),
+        }
 
-		vec.push(0x00); // Zero-length data block indicates end of extension
-		vec.into_boxed_slice()
-	}
-}
\ No newline at end of file
+        vec.push(0x00); // Zero-length data block indicates end of extension
+        vec.into_boxed_slice()
+    }
+}