Rename Dependency.dependency to Dependency.product

This commit is contained in:
RunasSudo 2025-05-21 19:18:14 +10:00
parent 2d7250e943
commit d422e83275
Signed by: RunasSudo
GPG Key ID: 7234E476BF21C61A
2 changed files with 36 additions and 35 deletions

View File

@ -270,18 +270,18 @@ impl UpdateBalancesAt {
// Check for BalancesAt -> Transactions
let dependencies_for_step = dependencies.dependencies_for_step(&step.id());
if dependencies_for_step.len() == 1
&& dependencies_for_step[0].dependency.kind == ReportingProductKind::BalancesAt
&& dependencies_for_step[0].product.kind == ReportingProductKind::BalancesAt
{
return true;
}
// Check if BalancesBetween -> Transactions and BalancesAt is available
if dependencies_for_step.len() == 1
&& dependencies_for_step[0].dependency.kind
&& dependencies_for_step[0].product.kind
== ReportingProductKind::BalancesBetween
{
let date_end = dependencies_for_step[0]
.dependency
.product
.args
.downcast_ref::<DateStartDateEndArgs>()
.unwrap()
@ -289,7 +289,7 @@ impl UpdateBalancesAt {
match has_step_or_can_build(
&ReportingProductId {
name: dependencies_for_step[0].dependency.name,
name: dependencies_for_step[0].product.name,
kind: ReportingProductKind::BalancesAt,
args: Box::new(DateArgs { date: date_end }),
},
@ -398,7 +398,7 @@ impl UpdateBalancesBetween {
// Check for BalancesBetween -> Transactions
let dependencies_for_step = dependencies.dependencies_for_step(&step.id());
if dependencies_for_step.len() == 1
&& dependencies_for_step[0].dependency.kind
&& dependencies_for_step[0].product.kind
== ReportingProductKind::BalancesBetween
{
return true;

View File

@ -35,9 +35,9 @@ impl ReportingGraphDependencies {
if !self
.vec
.iter()
.any(|d| d.step == step && d.dependency == dependency)
.any(|d| d.step == step && d.product == dependency)
{
self.vec.push(Dependency { step, dependency });
self.vec.push(Dependency { step, product: dependency });
}
}
@ -65,10 +65,11 @@ impl ReportingGraphDependencies {
}
}
/// Represents that a [ReportingStep] depends on a [ReportingProduct]
#[derive(Debug)]
pub struct Dependency {
pub step: ReportingStepId,
pub dependency: ReportingProductId,
pub product: ReportingProductId,
}
#[derive(Debug)]
@ -147,12 +148,12 @@ fn would_be_ready_to_execute(
// Check if the dependency has been produced by a previous step
for previous_step in previous_steps {
if steps[*previous_step].id().name == dependency.dependency.name
&& steps[*previous_step].id().args == dependency.dependency.args
if steps[*previous_step].id().name == dependency.product.name
&& steps[*previous_step].id().args == dependency.product.args
&& steps[*previous_step]
.id()
.product_kinds
.contains(&dependency.dependency.kind)
.contains(&dependency.product.kind)
{
continue 'check_each_dependency;
}
@ -197,33 +198,33 @@ pub fn solve_for(
todo!();
}
if !steps.iter().any(|s| {
s.id().name == dependency.dependency.name
&& s.id().args == dependency.dependency.args
&& s.id().product_kinds.contains(&dependency.dependency.kind)
s.id().name == dependency.product.name
&& s.id().args == dependency.product.args
&& s.id().product_kinds.contains(&dependency.product.kind)
}) {
// Try lookup function
if let Some(lookup_key) = context.step_lookup_fn.keys().find(|(name, kinds)| {
*name == dependency.dependency.name
&& kinds.contains(&dependency.dependency.kind)
*name == dependency.product.name
&& kinds.contains(&dependency.product.kind)
}) {
let (takes_args_fn, from_args_fn) =
context.step_lookup_fn.get(lookup_key).unwrap();
if takes_args_fn(&dependency.dependency.args) {
let new_step = from_args_fn(dependency.dependency.args.clone());
if takes_args_fn(&dependency.product.args) {
let new_step = from_args_fn(dependency.product.args.clone());
// Check new step meets the dependency
if new_step.id().name != dependency.dependency.name {
panic!("Unexpected step returned from lookup function (expected name {}, got {})", dependency.dependency.name, new_step.id().name);
if new_step.id().name != dependency.product.name {
panic!("Unexpected step returned from lookup function (expected name {}, got {})", dependency.product.name, new_step.id().name);
}
if new_step.id().args != dependency.dependency.args {
panic!("Unexpected step returned from lookup function {} (expected args {:?}, got {:?})", dependency.dependency.name, dependency.dependency.args, new_step.id().args);
if new_step.id().args != dependency.product.args {
panic!("Unexpected step returned from lookup function {} (expected args {:?}, got {:?})", dependency.product.name, dependency.product.args, new_step.id().args);
}
if !new_step
.id()
.product_kinds
.contains(&dependency.dependency.kind)
.contains(&dependency.product.kind)
{
panic!("Unexpected step returned from lookup function {} (expected kind {:?}, got {:?})", dependency.dependency.name, dependency.dependency.kind, new_step.id().product_kinds);
panic!("Unexpected step returned from lookup function {} (expected kind {:?}, got {:?})", dependency.product.name, dependency.product.kind, new_step.id().product_kinds);
}
new_steps.push(new_step);
@ -234,17 +235,17 @@ pub fn solve_for(
// No explicit step for product - try builders
for builder in context.step_dynamic_builders.iter() {
if (builder.can_build)(
dependency.dependency.name,
dependency.dependency.kind,
&dependency.dependency.args,
dependency.product.name,
dependency.product.kind,
&dependency.product.args,
&steps,
&dependencies,
&context,
) {
new_steps.push((builder.build)(
dependency.dependency.name,
dependency.dependency.kind,
dependency.dependency.args.clone(),
dependency.product.name,
dependency.product.kind,
dependency.product.args.clone(),
&steps,
&dependencies,
&context,
@ -283,19 +284,19 @@ pub fn solve_for(
return Err(ReportingCalculationError::UnknownStep {
message: format!(
"No implementation for step {} which {} is a dependency of",
dependency.step, dependency.dependency
dependency.step, dependency.product
),
});
}
if !steps.iter().any(|s| {
s.id().name == dependency.dependency.name
&& s.id().args == dependency.dependency.args
&& s.id().product_kinds.contains(&dependency.dependency.kind)
s.id().name == dependency.product.name
&& s.id().args == dependency.product.args
&& s.id().product_kinds.contains(&dependency.product.kind)
}) {
return Err(ReportingCalculationError::NoStepForProduct {
message: format!(
"No step builds product {} wanted by {}",
dependency.dependency, dependency.step
dependency.product, dependency.step
),
});
}