Skip to main content

just/
dependency.rs

1use super::*;
2
3#[derive(Clone, PartialEq, Debug, Serialize)]
4pub(crate) struct Dependency<'src> {
5  #[serde(serialize_with = "flatten_arguments")]
6  pub(crate) arguments: Vec<Vec<Expression<'src>>>,
7  #[serde(serialize_with = "keyed::serialize")]
8  pub(crate) recipe: Arc<Recipe<'src>>,
9}
10
11fn flatten_arguments<S: Serializer>(
12  arguments: &[Vec<Expression<'_>>],
13  serializer: S,
14) -> Result<S::Ok, S::Error> {
15  let len = arguments.iter().map(Vec::len).sum();
16  let mut seq = serializer.serialize_seq(Some(len))?;
17  for group in arguments {
18    for argument in group {
19      seq.serialize_element(argument)?;
20    }
21  }
22  seq.end()
23}
24
25impl Display for Dependency<'_> {
26  fn fmt(&self, f: &mut Formatter) -> fmt::Result {
27    if self.arguments.is_empty() {
28      write!(f, "{}", self.recipe.name())
29    } else {
30      write!(f, "({}", self.recipe.name())?;
31
32      for group in &self.arguments {
33        for argument in group {
34          write!(f, " {argument}")?;
35        }
36      }
37
38      write!(f, ")")
39    }
40  }
41}