1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use core::{Object, RpRequiredPackage, Version};
use errors::*;
use resolver::Resolver;

pub struct Resolvers {
    resolvers: Vec<Box<Resolver>>,
}

impl Resolvers {
    pub fn new(resolvers: Vec<Box<Resolver>>) -> Resolvers {
        Resolvers { resolvers: resolvers }
    }
}

impl Resolver for Resolvers {
    fn resolve(
        &mut self,
        package: &RpRequiredPackage,
    ) -> Result<Vec<(Option<Version>, Box<Object>)>> {
        let mut out = Vec::new();

        for resolver in &mut self.resolvers.iter_mut() {
            out.extend(resolver.resolve(package)?);
        }

        Ok(out)
    }
}