67 lines
1.6 KiB
Rust
67 lines
1.6 KiB
Rust
use crate::experimental::trait_based::{
|
|
data::{
|
|
io::{Inputs, Outputs},
|
|
raw::Data,
|
|
},
|
|
element::{DataType, ElementIo, PipelineElement},
|
|
};
|
|
|
|
pub struct Concatenate(pub String);
|
|
impl PipelineElement for Concatenate {
|
|
fn runner(&self) -> fn(&Inputs) -> Outputs {
|
|
|input| {
|
|
if let [Data::String(s0), Data::String(s1), ..] = input.inner()[..] {
|
|
format!("{s0}{s1}").into()
|
|
} else {
|
|
panic!("Invalid data passed")
|
|
}
|
|
}
|
|
}
|
|
|
|
fn signature(&self) -> ElementIo {
|
|
ElementIo {
|
|
inputs: vec![DataType::String, DataType::String],
|
|
outputs: vec![DataType::String],
|
|
}
|
|
}
|
|
}
|
|
|
|
pub struct Upper;
|
|
impl PipelineElement for Upper {
|
|
fn runner(&self) -> fn(&Inputs) -> Outputs {
|
|
|input| {
|
|
if let [Data::String(s), ..] = input.inner()[..] {
|
|
s.to_uppercase().into()
|
|
} else {
|
|
panic!("Invalid data passed")
|
|
}
|
|
}
|
|
}
|
|
|
|
fn signature(&self) -> ElementIo {
|
|
ElementIo {
|
|
inputs: vec![DataType::String],
|
|
outputs: vec![DataType::String],
|
|
}
|
|
}
|
|
}
|
|
|
|
pub struct Lower;
|
|
impl PipelineElement for Lower {
|
|
fn runner(&self) -> fn(&Inputs) -> Outputs {
|
|
|input| {
|
|
if let [Data::String(s), ..] = input.inner()[..] {
|
|
s.to_lowercase().into()
|
|
} else {
|
|
panic!("Invalid data passed")
|
|
}
|
|
}
|
|
}
|
|
|
|
fn signature(&self) -> ElementIo {
|
|
ElementIo {
|
|
inputs: vec![DataType::String],
|
|
outputs: vec![DataType::String],
|
|
}
|
|
}
|
|
}
|