jellyflow_runtime/profile/
mod.rs1mod domain;
12mod pipeline;
13
14use crate::io::NodeGraphInteractionState;
15use crate::rules::{ConnectPlan, Diagnostic};
16pub use domain::{
17 ConnectionRuleDescriptor, FieldSchema, GraphProfileMetadata, NodeFieldSchemaSet,
18 ValidationHint, VariableDescriptor, VariableSurfaceDescriptor,
19};
20use jellyflow_core::core::{EdgeKind, Graph, PortId};
21use jellyflow_core::interaction::NodeGraphConnectionMode;
22use jellyflow_core::types::{DefaultTypeCompatibility, TypeDesc};
23pub(crate) use pipeline::apply_transaction_with_profile_in_place;
24pub use pipeline::{
25 ApplyPipelineError, apply_connect_plan_with_profile, apply_transaction_with_profile,
26};
27
28pub trait GraphProfile {
30 fn metadata(&self) -> GraphProfileMetadata {
32 GraphProfileMetadata::default()
33 }
34
35 fn type_of_port(&mut self, graph: &Graph, port: PortId) -> Option<TypeDesc>;
39
40 fn plan_connect(
45 &mut self,
46 graph: &Graph,
47 a: PortId,
48 b: PortId,
49 mode: NodeGraphConnectionMode,
50 ) -> ConnectPlan {
51 let mut compat = DefaultTypeCompatibility::default();
52 crate::rules::plan_connect_typed_with_mode_and_policy(
53 graph,
54 a,
55 b,
56 mode,
57 &NodeGraphInteractionState::default(),
58 |graph, port| self.type_of_port(graph, port),
59 &mut compat,
60 )
61 }
62
63 fn validate_graph(&mut self, graph: &Graph) -> Vec<Diagnostic>;
65
66 fn allow_cycles(&self, _edge_kind: EdgeKind) -> bool {
68 true
69 }
70
71 fn concretize_bound(&self) -> usize {
75 8
76 }
77
78 fn concretize(&mut self, _graph: &Graph) -> Vec<jellyflow_core::ops::GraphOp> {
82 Vec::new()
83 }
84}