diff --git a/src/node/handler.rs b/src/node/handler.rs new file mode 100644 index 0000000..018d4dd --- /dev/null +++ b/src/node/handler.rs @@ -0,0 +1,53 @@ +pub trait NodeHandler { + fn run(&self, inputs: Vec) -> f64; +} + +pub struct NodeFunction { + function: fn(Vec) -> f64, +} + +impl NodeFunction { + pub fn new(function: fn(Vec) -> f64) -> NodeFunction { + NodeFunction { function } + } +} + +impl NodeHandler for NodeFunction { + fn run(&self, inputs: Vec) -> f64 { + (self.function)(inputs) + } +} + +pub struct NodeNumber { + number: f64, +} + +impl NodeNumber { + pub fn new(number: Option) -> NodeNumber { + NodeNumber { + number: number.unwrap_or(0f64), + } + } +} + +impl NodeHandler for NodeNumber { + fn run(&self, inputs: Vec) -> f64 { + self.number + } +} + +pub struct NodeVariable { + getter: fn() -> f64, +} + +impl NodeVariable { + pub fn new(getter: fn() -> f64) -> NodeVariable { + NodeVariable { getter } + } +} + +impl NodeHandler for NodeVariable { + fn run(&self, inputs: Vec) -> f64 { + (self.getter)() + } +}