use melodium_core::*;
use melodium_macro::{check, mel_function, mel_treatment};
#[mel_treatment(
input chars Stream<char>
output matches Stream<bool>
)]
pub async fn exact(reference: char) {
while let Ok(chars) = chars.recv_char().await {
check!(
matches
.send_bool(chars.into_iter().map(|char| char == reference).collect())
.await
);
}
}
#[mel_function]
pub fn exact(char: char, reference: char) -> bool {
char == reference
}
#[mel_treatment(
input chars Stream<char>
output is Stream<bool>
)]
pub async fn is_alphabetic() {
while let Ok(chars) = chars.recv_char().await {
check!(
is.send_bool(chars.into_iter().map(|char| char.is_alphabetic()).collect())
.await
);
}
}
#[mel_function]
pub fn is_alphabetic(char: char) -> bool {
char.is_alphabetic()
}
#[mel_treatment(
input chars Stream<char>
output is Stream<bool>
)]
pub async fn is_alphanumeric() {
while let Ok(chars) = chars.recv_char().await {
check!(
is.send_bool(
chars
.into_iter()
.map(|char| char.is_alphanumeric())
.collect()
)
.await
);
}
}
#[mel_function]
pub fn is_alphanumeric(char: char) -> bool {
char.is_alphanumeric()
}
#[mel_treatment(
input chars Stream<char>
output is Stream<bool>
)]
pub async fn is_ascii() {
while let Ok(chars) = chars.recv_char().await {
check!(
is.send_bool(chars.into_iter().map(|char| char.is_ascii()).collect())
.await
);
}
}
#[mel_function]
pub fn is_ascii(char: char) -> bool {
char.is_ascii()
}
#[mel_treatment(
input chars Stream<char>
output is Stream<bool>
)]
pub async fn is_control() {
while let Ok(chars) = chars.recv_char().await {
check!(
is.send_bool(chars.into_iter().map(|char| char.is_control()).collect())
.await
);
}
}
#[mel_function]
pub fn is_control(char: char) -> bool {
char.is_control()
}
#[mel_treatment(
input chars Stream<char>
output is Stream<bool>
)]
pub async fn is_digit(base: u8) {
while let Ok(chars) = chars.recv_char().await {
if base <= 36 {
check!(
is.send_bool(
chars
.into_iter()
.map(|char| char.is_digit(base as u32))
.collect()
)
.await
);
} else {
check!(is.send_bool(vec![false; chars.len()]).await);
}
}
}
#[mel_function]
pub fn is_digit(char: char, base: u8) -> bool {
if base <= 36 {
char.is_digit(base as u32)
} else {
false
}
}
#[mel_treatment(
input chars Stream<char>
output is Stream<bool>
)]
pub async fn is_lowercase() {
while let Ok(chars) = chars.recv_char().await {
check!(
is.send_bool(chars.into_iter().map(|char| char.is_lowercase()).collect())
.await
);
}
}
#[mel_function]
pub fn is_lowercase(char: char) -> bool {
char.is_lowercase()
}
#[mel_treatment(
input chars Stream<char>
output is Stream<bool>
)]
pub async fn is_uppercase() {
while let Ok(chars) = chars.recv_char().await {
check!(
is.send_bool(chars.into_iter().map(|char| char.is_uppercase()).collect())
.await
);
}
}
#[mel_function]
pub fn is_uppercase(char: char) -> bool {
char.is_uppercase()
}
#[mel_treatment(
input chars Stream<char>
output is Stream<bool>
)]
pub async fn is_whitespace() {
while let Ok(chars) = chars.recv_char().await {
check!(
is.send_bool(chars.into_iter().map(|char| char.is_whitespace()).collect())
.await
);
}
}
#[mel_function]
pub fn is_whitespace(char: char) -> bool {
char.is_whitespace()
}