use std::fmt;
use serde_derive::{Deserialize, Serialize};
#[derive(Deserialize, Serialize, Clone, PartialEq, Debug)]
pub enum Conversion {
WrapAsArray,
ArraySerialize, }
#[derive(Deserialize, Serialize, Clone, PartialEq, Debug)]
pub struct OutputConnection {
#[serde(default, skip_serializing_if = "String::is_empty")]
pub subroute: String,
pub function_id: usize,
pub io_number: usize,
pub flow_id: usize,
#[serde(default = "default_array_level_serde", skip_serializing_if = "is_default_array_level_serde")]
pub array_level_serde: i32,
#[serde(default = "default_generic", skip_serializing_if = "is_not_generic")]
pub generic: bool,
#[serde(default = "default_destination_route", skip_serializing_if = "Option::is_none")]
pub route: Option<String>,
}
fn default_array_level_serde() -> i32 {
0
}
#[allow(clippy::trivially_copy_pass_by_ref)] fn is_default_array_level_serde(order: &i32) -> bool {
*order == 0
}
fn default_generic() -> bool {
false
}
#[allow(clippy::trivially_copy_pass_by_ref)] fn is_not_generic(generic: &bool) -> bool {
!*generic
}
impl OutputConnection {
pub fn new(subroute: String,
function_id: usize,
io_number: usize,
flow_id: usize,
array_level_serde: i32,
generic: bool,
route: Option<String>) -> Self {
OutputConnection {
subroute,
function_id,
io_number,
flow_id,
array_level_serde,
generic,
route,
}
}
pub fn is_generic(&self) -> bool {
self.generic
}
}
fn default_destination_route() -> Option<String> {
None
}
impl fmt::Display for OutputConnection {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "Output Connection")?;
if !self.subroute.is_empty() {
write!(f, " from sub-path '{}'", self.subroute)?;
}
write!(f, " -> Function #{}({}):{}", self.function_id, self.flow_id, self.io_number)?;
if let Some(route) = &self.route {
write!(f, " @ route '{}'", route)?;
}
write!(f, "")
}
}
#[cfg(test)]
mod test {
#[test]
fn default_array_order_test() {
assert_eq!(super::default_array_level_serde(), 0)
}
#[test]
fn is_default_array_order_test() {
assert!(super::is_default_array_level_serde(&0));
}
#[test]
fn is_not_default_array_order_test() {
assert!(!super::is_default_array_level_serde(&1));
}
#[test]
fn default_generic_test() {
assert!(!super::default_generic());
}
#[test]
fn default_not_generic_test() {
assert!(super::is_not_generic(&false));
}
#[test]
fn default_destination_route_test() {
assert_eq!(super::default_destination_route(), None)
}
#[test]
fn display_test() {
let connection = super::OutputConnection::new("/".into(),
1, 1, 1, 0, false, None);
println!("Connection: {}", connection);
}
#[test]
fn display_with_route_test() {
let connection = super::OutputConnection::new("/".into(),
1, 1, 1, 0, false,
Some("/flow1/input".into()));
println!("Connection: {}", connection);
}
}