bluejay_validator/executable/operation/analyzers/complexity_cost/
cost_computer.rs1use crate::executable::operation::VariableValues;
2use bluejay_core::definition::SchemaDefinition;
3use bluejay_core::executable::ExecutableDocument;
4
5pub trait CostComputer<'a, E: ExecutableDocument, S: SchemaDefinition, V: VariableValues> {
6 type FieldMultipliers: FieldMultipliers<E>;
7
8 fn new(
9 operation_definition: &'a E::OperationDefinition,
10 schema_definition: &'a S,
11 variable_values: &'a V,
12 ) -> Self;
13
14 fn cost_for_field_definition(&self, field_definition: &S::FieldDefinition) -> usize;
15
16 fn field_multipliers(
17 &self,
18 field_definition: &S::FieldDefinition,
19 field: &E::Field,
20 ) -> Self::FieldMultipliers;
21}
22
23pub trait FieldMultipliers<E: ExecutableDocument>: Default {
24 fn multiplier_for_field(&self, field: &E::Field) -> usize;
25}
26
27pub struct DefaultCostComputer;
28
29impl<'a, E: ExecutableDocument, S: SchemaDefinition, V: VariableValues> CostComputer<'a, E, S, V>
30 for DefaultCostComputer
31{
32 type FieldMultipliers = UnitFieldMultipliers;
33
34 fn new(_: &'a E::OperationDefinition, _: &'a S, _: &'a V) -> Self {
35 Self
36 }
37
38 fn cost_for_field_definition(&self, _: &<S as SchemaDefinition>::FieldDefinition) -> usize {
39 1
40 }
41
42 fn field_multipliers(
43 &self,
44 _: &<S as SchemaDefinition>::FieldDefinition,
45 _: &<E as ExecutableDocument>::Field,
46 ) -> UnitFieldMultipliers {
47 UnitFieldMultipliers
48 }
49}
50
51#[derive(Default)]
52pub struct UnitFieldMultipliers;
53
54impl<E: ExecutableDocument> FieldMultipliers<E> for UnitFieldMultipliers {
55 fn multiplier_for_field(&self, _: &E::Field) -> usize {
56 1
57 }
58}