use serde_json::Value;
use crate::node::Node;
use crate::node_props::NodeProps;
use crate::sdk::NodeMethods;
pub struct VoidNode {
node: Node,
}
impl VoidNode {
pub fn new(props: NodeProps) -> Self {
Self {
node: Node::new(props),
}
}
pub fn get(&self) {
match self.evaluate() {
Ok(Value::Bool(true)) => (),
value => {
self.log_unexpected_value_error(value);
}
}
}
}
impl GetNode for VoidNode {
fn get_node(&self) -> &Node {
&self.node
}
}
pub struct BooleanNode {
node: Node,
}
impl BooleanNode {
pub fn new(props: NodeProps) -> Self {
Self {
node: Node::new(props),
}
}
pub fn get(&self, fallback: bool) -> bool {
match self.evaluate() {
Ok(Value::Bool(value)) => value,
value => {
self.log_unexpected_value_error(value);
fallback
}
}
}
}
impl GetNode for BooleanNode {
fn get_node(&self) -> &Node {
&self.node
}
}
pub struct IntNode {
node: Node,
}
impl IntNode {
pub fn new(props: NodeProps) -> Self {
Self {
node: Node::new(props),
}
}
pub fn get(&self, fallback: i64) -> i64 {
match self.evaluate() {
Ok(Value::Number(number)) if number.is_i64() => number.as_i64().unwrap(),
value => {
self.log_unexpected_value_error(value);
fallback
}
}
}
}
impl GetNode for IntNode {
fn get_node(&self) -> &Node {
&self.node
}
}
pub struct FloatNode {
node: Node,
}
impl FloatNode {
pub fn new(props: NodeProps) -> Self {
Self {
node: Node::new(props),
}
}
pub fn get(&self, fallback: f64) -> f64 {
match self.evaluate() {
Ok(Value::Number(ref number)) => match number.as_f64() {
Some(number) => number,
None => {
self.log_unexpected_value_error(Ok(Value::Number(number.to_owned())));
fallback
}
},
value => {
self.log_unexpected_value_error(value);
fallback
}
}
}
}
impl GetNode for FloatNode {
fn get_node(&self) -> &Node {
&self.node
}
}
pub struct StringNode {
node: Node,
}
impl StringNode {
pub fn new(props: NodeProps) -> Self {
Self {
node: Node::new(props),
}
}
pub fn get(&self, fallback: String) -> String {
match self.evaluate() {
Ok(Value::String(string)) => string,
value => {
self.log_unexpected_value_error(value);
fallback
}
}
}
}
impl GetNode for StringNode {
fn get_node(&self) -> &Node {
&self.node
}
}
pub trait GetNode {
fn get_node(&self) -> &Node;
}