Initial pass at a source collection proxy
authorYehuda Katz + Carl Lerche <engineering@tilde.io>
Tue, 10 Jun 2014 23:29:25 +0000 (16:29 -0700)
committerTim Carey-Smith <tim@spork.in>
Tue, 10 Jun 2014 23:29:25 +0000 (16:29 -0700)
src/cargo/core/source.rs

index 6bb1bee1a475ef02dcf6de736ce643abcbf97449..724fd5521c7a30bf35c8a9d60d7f458e64094146 100644 (file)
@@ -35,3 +35,42 @@ pub trait Source {
      */
     fn get(&self, packages: &[NameVer]) -> CargoResult<Vec<Package>>;
 }
+
+impl Source for Vec<Box<Source>> {
+
+    fn update(&self) -> CargoResult<()> {
+        for source in self.iter() {
+            try!(source.update());
+        }
+
+        Ok(())
+    }
+
+    fn list(&self) -> CargoResult<Vec<Summary>> {
+        let mut ret = Vec::new();
+
+        for source in self.iter() {
+            ret.push_all(try!(source.list()).as_slice());
+        }
+
+        Ok(ret)
+    }
+
+    fn download(&self, packages: &[NameVer]) -> CargoResult<()> {
+        for source in self.iter() {
+            try!(source.download(packages));
+        }
+
+        Ok(())
+    }
+
+    fn get(&self, packages: &[NameVer]) -> CargoResult<Vec<Package>> {
+        let mut ret = Vec::new();
+
+        for source in self.iter() {
+            ret.push_all(try!(source.get(packages)).as_slice());
+        }
+
+        Ok(ret)
+    }
+}