Remove unused path representation
diff --git a/piet-scene/src/path.rs b/piet-scene/src/path.rs
index ffbce3e..3ad0ac1 100644
--- a/piet-scene/src/path.rs
+++ b/piet-scene/src/path.rs
@@ -49,254 +49,6 @@
     }
 }
 
-/// Encoded collection of path elements.
-#[derive(Clone, Default, Debug)]
-pub struct Path {
-    tag_stream: Vec<u8>,
-    pathseg_stream: Vec<u8>,
-    n_path: u32,
-    n_pathseg: u32,
-}
-
-impl Path {
-    pub fn new() -> Self {
-        Self::default()
-    }
-
-    pub fn elements(&self) -> Elements {
-        Elements::new(&self)
-    }
-}
-
-#[derive(Clone)]
-pub struct Elements<'a> {
-    tag_stream: &'a [u8],
-    points: &'a [[f32; 2]],
-    tag_ix: usize,
-    point_ix: usize,
-    next_element: Option<Element>,
-    close: bool,
-}
-
-impl<'a> Elements<'a> {
-    fn new(path: &'a Path) -> Self {
-        let points: &'a [[f32; 2]] = bytemuck::cast_slice(&path.pathseg_stream);
-        let (point_ix, next_element) = match points.get(0) {
-            Some(&point) => (1, Some(Element::MoveTo(point.into()))),
-            None => (0, None),
-        };
-        Self {
-            tag_stream: &path.tag_stream,
-            points,
-            tag_ix: 0,
-            point_ix,
-            next_element,
-            close: false,
-        }
-    }
-}
-
-impl<'a> Iterator for Elements<'a> {
-    type Item = Element;
-
-    fn next(&mut self) -> Option<Self::Item> {
-        // println!("n_points: {}", self.points.len());
-        // println!("tag_ix: {}, point_ix: {}, el: {:?}, close: {}", self.tag_ix, self.point_ix, self.next_element, self.close);
-        if self.close {
-            self.close = false;
-            return Some(Element::Close);
-        }
-        if let Some(next_el) = self.next_element.take() {
-            return Some(next_el);
-        }
-        let tag = *self.tag_stream.get(self.tag_ix)?;
-        self.tag_ix += 1;
-        let end = tag & 4 != 0;
-        let el = match tag & 3 {
-            1 => {
-                let p0 = *self.points.get(self.point_ix)?;
-                self.point_ix += 1;
-                Element::LineTo(p0.into())
-            }
-            2 => {
-                let p0 = *self.points.get(self.point_ix)?;
-                let p1 = *self.points.get(self.point_ix + 1)?;
-                self.point_ix += 2;
-                Element::QuadTo(p0.into(), p1.into())
-            }
-            3 => {
-                let p0 = *self.points.get(self.point_ix)?;
-                let p1 = *self.points.get(self.point_ix + 1)?;
-                let p2 = *self.points.get(self.point_ix + 2)?;
-                self.point_ix += 3;
-                Element::CurveTo(p0.into(), p1.into(), p2.into())
-            }
-            _ => return None,
-        };
-        if end {
-            // println!("END!");
-            if let Some(&p0) = self.points.get(self.point_ix) {
-                self.point_ix += 1;
-                self.next_element = Some(Element::MoveTo(p0.into()));
-            }
-            self.close = tag & 0x80 != 0;
-        }
-        Some(el)
-    }
-}
-
-pub struct PathBuilder<'a> {
-    tag_stream: &'a mut Vec<u8>,
-    // If we're never going to use the i16 encoding, it might be
-    // slightly faster to store this as Vec<u32>, we'd get aligned
-    // stores on ARM etc.
-    pathseg_stream: &'a mut Vec<u8>,
-    first_pt: [f32; 2],
-    state: State,
-    n_pathseg: u32,
-}
-
-#[derive(PartialEq)]
-enum State {
-    Start,
-    MoveTo,
-    NonemptySubpath,
-}
-
-impl<'a> PathBuilder<'a> {
-    pub fn new(path: &'a mut Path) -> Self {
-        Self {
-            tag_stream: &mut path.tag_stream,
-            pathseg_stream: &mut path.pathseg_stream,
-            first_pt: [0.0, 0.0],
-            state: State::Start,
-            n_pathseg: 0,
-        }
-    }
-
-    fn new_inner(tags: &'a mut Vec<u8>, pathsegs: &'a mut Vec<u8>) -> PathBuilder<'a> {
-        PathBuilder {
-            tag_stream: tags,
-            pathseg_stream: pathsegs,
-            first_pt: [0.0, 0.0],
-            state: State::Start,
-            n_pathseg: 0,
-        }
-    }
-
-    pub fn move_to(&mut self, x: f32, y: f32) {
-        let buf = [x, y];
-        let bytes = bytemuck::bytes_of(&buf);
-        self.first_pt = buf;
-        if self.state == State::MoveTo {
-            let new_len = self.pathseg_stream.len() - 8;
-            self.pathseg_stream.truncate(new_len);
-        }
-        if self.state == State::NonemptySubpath {
-            if let Some(tag) = self.tag_stream.last_mut() {
-                *tag |= 4;
-            }
-        }
-        self.pathseg_stream.extend_from_slice(bytes);
-        self.state = State::MoveTo;
-    }
-
-    pub fn line_to(&mut self, x: f32, y: f32) {
-        if self.state == State::Start {
-            // should warn or error
-            return;
-        }
-        let buf = [x, y];
-        let bytes = bytemuck::bytes_of(&buf);
-        self.pathseg_stream.extend_from_slice(bytes);
-        self.tag_stream.push(9);
-        self.state = State::NonemptySubpath;
-        self.n_pathseg += 1;
-    }
-
-    pub fn quad_to(&mut self, x1: f32, y1: f32, x2: f32, y2: f32) {
-        if self.state == State::Start {
-            return;
-        }
-        let buf = [x1, y1, x2, y2];
-        let bytes = bytemuck::bytes_of(&buf);
-        self.pathseg_stream.extend_from_slice(bytes);
-        self.tag_stream.push(10);
-        self.state = State::NonemptySubpath;
-        self.n_pathseg += 1;
-    }
-
-    pub fn cubic_to(&mut self, x1: f32, y1: f32, x2: f32, y2: f32, x3: f32, y3: f32) {
-        if self.state == State::Start {
-            return;
-        }
-        let buf = [x1, y1, x2, y2, x3, y3];
-        let bytes = bytemuck::bytes_of(&buf);
-        self.pathseg_stream.extend_from_slice(bytes);
-        self.tag_stream.push(11);
-        self.state = State::NonemptySubpath;
-        self.n_pathseg += 1;
-    }
-
-    pub fn close_path(&mut self) {
-        match self.state {
-            State::Start => return,
-            State::MoveTo => {
-                let new_len = self.pathseg_stream.len() - 8;
-                self.pathseg_stream.truncate(new_len);
-                self.state = State::Start;
-                return;
-            }
-            State::NonemptySubpath => (),
-        }
-        let len = self.pathseg_stream.len();
-        if len < 8 {
-            // can't happen
-            return;
-        }
-        let first_bytes = bytemuck::bytes_of(&self.first_pt);
-        if &self.pathseg_stream[len - 8..len] != first_bytes {
-            self.pathseg_stream.extend_from_slice(first_bytes);
-            self.tag_stream.push(0x80 | 13);
-            self.n_pathseg += 1;
-        } else {
-            if let Some(tag) = self.tag_stream.last_mut() {
-                *tag |= 0x80 | 4;
-            }
-        }
-        self.state = State::Start;
-    }
-
-    fn finish(&mut self) {
-        if self.state == State::MoveTo {
-            let new_len = self.pathseg_stream.len() - 8;
-            self.pathseg_stream.truncate(new_len);
-        }
-        if let Some(tag) = self.tag_stream.last_mut() {
-            *tag |= 4;
-        }
-    }
-
-    /// Finish encoding a path.
-    ///
-    /// Encode this after encoding path segments.
-    pub fn path(&mut self) {
-        self.finish();
-        // maybe don't encode if path is empty? might throw off sync though
-        self.tag_stream.push(0x10);
-    }
-
-    /// Get the number of path segments.
-    ///
-    /// This is the number of path segments that will be written by the
-    /// path stage; use this for allocating the output buffer.
-    ///
-    /// Also note: it takes `self` for lifetime reasons.
-    pub fn n_pathseg(self) -> u32 {
-        self.n_pathseg
-    }
-}
-
 impl Rect {
     pub fn elements(&self) -> impl Iterator<Item = Element> + Clone {
         let elements = [
diff --git a/piet-scene/src/resource/mod.rs b/piet-scene/src/resource/mod.rs
index a811b99..1dfaa60 100644
--- a/piet-scene/src/resource/mod.rs
+++ b/piet-scene/src/resource/mod.rs
@@ -49,5 +49,4 @@
 
 struct PersistentBrushData {
     brush: Brush,
-
 }
diff --git a/piet-scene/src/scene/builder.rs b/piet-scene/src/scene/builder.rs
index 0f2c2a7..a92267b 100644
--- a/piet-scene/src/scene/builder.rs
+++ b/piet-scene/src/scene/builder.rs
@@ -45,10 +45,14 @@
 
 impl<'a> Builder<'a> {
     /// Creates a new builder for constructing a scene.
-    fn new(scene: &'a mut SceneData, resources: ResourceData<'a>) -> Self {
+    fn new(scene: &'a mut SceneData, mut resources: ResourceData<'a>) -> Self {
         scene.clear();
         resources.clear();
-        Self { scene, resources, layers: vec![] }
+        Self {
+            scene,
+            resources,
+            layers: vec![],
+        }
     }
 
     /// Pushes a transform matrix onto the stack.
@@ -173,7 +177,7 @@
     }
 
     /// Completes construction and finalizes the underlying scene.
-    pub fn finish(self) {
+    pub fn finish(mut self) {
         while let Some(layer) = self.layers.pop() {
             self.end_clip(Some(layer));
         }
@@ -301,7 +305,9 @@
         let element = Clip {
             blend: blend.unwrap_or(Blend::default()).pack(),
         };
-        self.scene.drawdata_stream.extend(bytemuck::bytes_of(&element));
+        self.scene
+            .drawdata_stream
+            .extend(bytemuck::bytes_of(&element));
         self.scene.n_clip += 1;
     }
 
@@ -310,7 +316,9 @@
         let element = Clip {
             blend: blend.unwrap_or(Blend::default()).pack(),
         };
-        self.scene.drawdata_stream.extend(bytemuck::bytes_of(&element));
+        self.scene
+            .drawdata_stream
+            .extend(bytemuck::bytes_of(&element));
         // This is a dummy path, and will go away with the new clip impl.
         self.scene.tag_stream.push(0x10);
         self.scene.n_path += 1;
@@ -326,10 +334,11 @@
 impl ResourceData<'_> {
     fn clear(&mut self) {
         match self {
-            Self::Fragment(res) {
+            Self::Fragment(res) => {
                 res.patches.clear();
                 res.stops.clear();
             }
+            _ => {}
         }
     }
 }