use super::*;
use melodium_macro::{check, mel_function, mel_treatment};
use std_mel::data::string_map::*;
#[mel_function]
pub fn null() -> Json {
Json(serde_json::Value::Null)
}
#[mel_treatment(
input ticks Stream<void>
output nulls Stream<Json>
)]
pub async fn null() {
while let Ok(ticks) = ticks.recv_many().await {
check!(
nulls
.send_many(TransmissionValue::Other(
vec![Value::Data(Arc::new(Json(serde_json::Value::Null))); ticks.len()].into()
))
.await
)
}
}
#[mel_function(
generic B (ToBool)
)]
pub fn from_bool(value: B) -> Json {
Json(serde_json::Value::Bool(value.to_bool()))
}
#[mel_treatment(
generic B (ToBool)
input value Stream<B>
output json Stream<Json>
)]
pub async fn from_bool() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
json.send_many(TransmissionValue::Other(
values
.into_iter()
.map(|val| Value::Data(Arc::new(Json(serde_json::Value::Bool(val.to_bool())))))
.collect()
))
.await
)
}
}
#[mel_function(
generic I (ToI64)
)]
pub fn from_number_i64(value: I) -> Json {
Json(serde_json::Value::from(value.to_i64()))
}
#[mel_treatment(
generic I (ToI64)
input value Stream<I>
output json Stream<Json>
)]
pub async fn from_number_i64() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
json.send_many(TransmissionValue::Other(
values
.into_iter()
.map(|val| Value::Data(Arc::new(Json(serde_json::Value::from(val.to_i16())))))
.collect()
))
.await
)
}
}
#[mel_function(
generic U (ToU64)
)]
pub fn from_number_u64(value: U) -> Json {
Json(serde_json::Value::from(value.to_u64()))
}
#[mel_treatment(
generic U (ToU64)
input value Stream<U>
output json Stream<Json>
)]
pub async fn from_number_u64() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
json.send_many(TransmissionValue::Other(
values
.into_iter()
.map(|val| Value::Data(Arc::new(Json(serde_json::Value::from(val.to_u16())))))
.collect()
))
.await
)
}
}
#[mel_function(
generic F (ToF64)
)]
pub fn try_from_number_f64(value: F) -> Option<Json> {
if let Some(num) = serde_json::Number::from_f64(value.to_f64()) {
Some(Json(serde_json::Value::from(num)))
} else {
None
}
}
#[mel_treatment(
generic F (ToF64)
input value Stream<F>
output json Stream<Option<Json>>
)]
pub async fn try_from_number_f64() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
json.send_many(TransmissionValue::Other(
values
.into_iter()
.map(
|val| if let Some(num) = serde_json::Number::from_f64(val.to_f64()) {
Value::Option(Some(Box::new(Value::Data(Arc::new(Json(
serde_json::Value::from(num),
))))))
} else {
Value::Option(None)
}
)
.collect()
))
.await
)
}
}
#[mel_function(
generic F (ToF64)
)]
pub fn from_number_f64(value: F, replacement: Json) -> Json {
if let Some(num) = serde_json::Number::from_f64(value.to_f64()) {
Json(serde_json::Value::from(num))
} else {
replacement
}
}
#[mel_treatment(
generic F (ToF64)
input value Stream<F>
output json Stream<Json>
)]
pub async fn from_number_f64(replacement: Json) {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
json.send_many(TransmissionValue::Other(
values
.into_iter()
.map(
|val| if let Some(num) = serde_json::Number::from_f64(val.to_f64()) {
Value::Data(Arc::new(Json(serde_json::Value::from(num))))
} else {
Value::Data(Arc::clone(&replacement) as Arc<dyn Data>)
}
)
.collect()
))
.await
)
}
}
#[mel_function(
generic S (ToString)
)]
pub fn from_string(value: S) -> Json {
Json(serde_json::Value::from(DataTrait::to_string(&value)))
}
#[mel_treatment(
generic S (ToString)
input value Stream<S>
output json Stream<Json>
)]
pub async fn from_string() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
json.send_many(TransmissionValue::Other(
values
.into_iter()
.map(|val| Value::Data(Arc::new(Json(serde_json::Value::String(
DataTrait::to_string(&val)
)))))
.collect()
))
.await
)
}
}
#[mel_function]
pub fn from_string_map(map: StringMap) -> Json {
Json(serde_json::Value::Object(
map.map
.iter()
.map(|(key, val)| (key.into(), serde_json::Value::String(val.into())))
.collect(),
))
}
#[mel_treatment(
input value Stream<StringMap>
output json Stream<Json>
)]
pub async fn from_string_map() {
while let Ok(value) = value.recv_one().await.map(|val| {
GetData::<Arc<dyn Data>>::try_data(val)
.unwrap()
.downcast_arc::<StringMap>()
.unwrap()
}) {
let object = Json(serde_json::Value::Object(
value
.map
.iter()
.map(|(key, val)| (key.into(), serde_json::Value::String(val.into())))
.collect(),
));
check!(json.send_one(Value::Data(Arc::new(object))).await)
}
}
#[mel_function(
generic B (ToBool)
)]
pub fn from_option_bool(value: Option<B>) -> Json {
if let Some(val) = value {
Json(serde_json::Value::Bool(val.to_bool()))
} else {
Json(serde_json::Value::Null)
}
}
#[mel_treatment(
generic B (ToBool)
input value Stream<Option<B>>
output json Stream<Json>
)]
pub async fn from_option_bool() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
json.send_many(TransmissionValue::Other(
values
.into_iter()
.map(|val| Value::Data(Arc::new(Json(match val {
Value::Option(Some(val)) => {
serde_json::Value::Bool(val.to_bool())
}
_ => serde_json::Value::Null,
}))))
.collect()
))
.await
)
}
}
#[mel_function(
generic I (ToI64)
)]
pub fn from_option_number_i64(value: Option<I>) -> Json {
if let Some(val) = value {
Json(serde_json::Value::from(val.to_i64()))
} else {
Json(serde_json::Value::Null)
}
}
#[mel_treatment(
generic I (ToI64)
input value Stream<Option<I>>
output json Stream<Json>
)]
pub async fn from_option_number_i64() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
json.send_many(TransmissionValue::Other(
values
.into_iter()
.map(|val| Value::Data(Arc::new(Json(match val {
Value::Option(Some(val)) => {
serde_json::Value::from(val.to_i64())
}
_ => serde_json::Value::Null,
}))))
.collect()
))
.await
)
}
}
#[mel_function(
generic U (ToU64)
)]
pub fn from_option_number_u64(value: Option<U>) -> Json {
if let Some(val) = value {
Json(serde_json::Value::from(val.to_u64()))
} else {
Json(serde_json::Value::Null)
}
}
#[mel_treatment(
generic U (ToU64)
input value Stream<Option<U>>
output json Stream<Json>
)]
pub async fn from_option_number_u64() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
json.send_many(TransmissionValue::Other(
values
.into_iter()
.map(|val| Value::Data(Arc::new(Json(match val {
Value::Option(Some(val)) => {
serde_json::Value::from(val.to_u64())
}
_ => serde_json::Value::Null,
}))))
.collect()
))
.await
)
}
}
#[mel_function(
generic F (ToF64)
)]
pub fn try_from_option_number_f64(value: Option<F>) -> Option<Json> {
if let Some(val) = value {
if let Some(num) = serde_json::Number::from_f64(val.to_f64()) {
Some(Json(serde_json::Value::from(num)))
} else {
None
}
} else {
Some(Json(serde_json::Value::Null))
}
}
#[mel_treatment(
generic F (ToF64)
input value Stream<Option<F>>
output json Stream<Option<Json>>
)]
pub async fn try_from_option_number_f64() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
json.send_many(TransmissionValue::Other(
values
.into_iter()
.map(|val| match val {
Value::Option(Some(val)) => {
if let Some(num) = serde_json::Number::from_f64(val.to_f64()) {
Value::Option(Some(Box::new(Value::Data(Arc::new(Json(
serde_json::Value::from(num),
))))))
} else {
Value::Option(None)
}
}
_ => Value::Option(Some(Box::new(Value::Data(Arc::new(Json(
serde_json::Value::Null
)))))),
})
.collect()
))
.await
)
}
}
#[mel_function(
generic F (ToF64)
)]
pub fn from_option_number_f64(value: Option<F>, replacement: Json) -> Json {
if let Some(val) = value {
if let Some(num) = serde_json::Number::from_f64(val.to_f64()) {
Json(serde_json::Value::from(num))
} else {
replacement
}
} else {
Json(serde_json::Value::Null)
}
}
#[mel_treatment(
generic F (ToF64)
input value Stream<Option<F>>
output json Stream<Json>
)]
pub async fn from_option_number_f64(replacement: Json) {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
json.send_many(TransmissionValue::Other(
values
.into_iter()
.map(|val| match val {
Value::Option(Some(val)) => {
if let Some(num) = serde_json::Number::from_f64(val.to_f64()) {
Value::Data(Arc::new(Json(serde_json::Value::from(num))))
} else {
Value::Data(Arc::clone(&replacement) as Arc<dyn Data>)
}
}
_ => Value::Data(Arc::new(Json(serde_json::Value::Null))),
})
.collect()
))
.await
)
}
}
#[mel_function(
generic S (ToString)
)]
pub fn from_option_string(value: Option<S>) -> Json {
if let Some(val) = value {
Json(serde_json::Value::String(DataTrait::to_string(&val)))
} else {
Json(serde_json::Value::Null)
}
}
#[mel_treatment(
generic S (ToString)
input value Stream<Option<S>>
output json Stream<Json>
)]
pub async fn from_option_string() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
json.send_many(TransmissionValue::Other(
values
.into_iter()
.map(|val| Value::Data(Arc::new(Json(match val {
Value::Option(Some(val)) => {
serde_json::Value::String(DataTrait::to_string(&*val))
}
_ => serde_json::Value::Null,
}))))
.collect()
))
.await
)
}
}
#[mel_function]
pub fn is_null(value: Json) -> bool {
value.0.is_null()
}
#[mel_treatment(
input value Stream<Json>
output is_null Stream<bool>
)]
pub async fn is_null() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
is_null
.send_many(TransmissionValue::Bool(
values
.into_iter()
.map(|val| match val {
Value::Data(val) => val
.downcast_arc::<Json>()
.map(|json| json.0.is_null())
.unwrap_or(false),
_ => false,
})
.collect()
))
.await
)
}
}
#[mel_function]
pub fn is_bool(value: Json) -> bool {
value.0.is_boolean()
}
#[mel_treatment(
input value Stream<Json>
output is_bool Stream<bool>
)]
pub async fn is_bool() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
is_bool
.send_many(TransmissionValue::Bool(
values
.into_iter()
.map(|val| match val {
Value::Data(val) => val
.downcast_arc::<Json>()
.map(|json| json.0.is_boolean())
.unwrap_or(false),
_ => false,
})
.collect()
))
.await
)
}
}
#[mel_function]
pub fn is_string(value: Json) -> bool {
value.0.is_string()
}
#[mel_treatment(
input value Stream<Json>
output is_string Stream<bool>
)]
pub async fn is_string() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
is_string
.send_many(TransmissionValue::Bool(
values
.into_iter()
.map(|val| match val {
Value::Data(val) => val
.downcast_arc::<Json>()
.map(|json| json.0.is_string())
.unwrap_or(false),
_ => false,
})
.collect()
))
.await
)
}
}
#[mel_function]
pub fn is_number(value: Json) -> bool {
value.0.is_number()
}
#[mel_treatment(
input value Stream<Json>
output is_number Stream<bool>
)]
pub async fn is_number() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
is_number
.send_many(TransmissionValue::Bool(
values
.into_iter()
.map(|val| match val {
Value::Data(val) => val
.downcast_arc::<Json>()
.map(|json| json.0.is_number())
.unwrap_or(false),
_ => false,
})
.collect()
))
.await
)
}
}
#[mel_function]
pub fn is_i64(value: Json) -> bool {
value.0.is_i64()
}
#[mel_treatment(
input value Stream<Json>
output is_i64 Stream<bool>
)]
pub async fn is_i64() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
is_i64
.send_many(TransmissionValue::Bool(
values
.into_iter()
.map(|val| match val {
Value::Data(val) => val
.downcast_arc::<Json>()
.map(|json| json.0.is_i64())
.unwrap_or(false),
_ => false,
})
.collect()
))
.await
)
}
}
#[mel_function]
pub fn is_u64(value: Json) -> bool {
value.0.is_u64()
}
#[mel_treatment(
input value Stream<Json>
output is_u64 Stream<bool>
)]
pub async fn is_u64() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
is_u64
.send_many(TransmissionValue::Bool(
values
.into_iter()
.map(|val| match val {
Value::Data(val) => val
.downcast_arc::<Json>()
.map(|json| json.0.is_u64())
.unwrap_or(false),
_ => false,
})
.collect()
))
.await
)
}
}
#[mel_function]
pub fn is_f64(value: Json) -> bool {
value.0.is_f64()
}
#[mel_treatment(
input value Stream<Json>
output is_f64 Stream<bool>
)]
pub async fn is_f64() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
is_f64
.send_many(TransmissionValue::Bool(
values
.into_iter()
.map(|val| match val {
Value::Data(val) => val
.downcast_arc::<Json>()
.map(|json| json.0.is_f64())
.unwrap_or(false),
_ => false,
})
.collect()
))
.await
)
}
}
#[mel_function]
pub fn is_vec(value: Json) -> bool {
value.0.is_array()
}
#[mel_treatment(
input value Stream<Json>
output is_vector Stream<bool>
)]
pub async fn is_vector() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
is_vector
.send_many(TransmissionValue::Bool(
values
.into_iter()
.map(|val| match val {
Value::Data(val) => val
.downcast_arc::<Json>()
.map(|json| json.0.is_array())
.unwrap_or(false),
_ => false,
})
.collect()
))
.await
)
}
}
#[mel_function]
pub fn is_object(value: Json) -> bool {
value.0.is_object()
}
#[mel_treatment(
input value Stream<Json>
output is_object Stream<bool>
)]
pub async fn is_object() {
while let Ok(values) = value
.recv_many()
.await
.map(|values| Into::<VecDeque<Value>>::into(values))
{
check!(
is_object
.send_many(TransmissionValue::Bool(
values
.into_iter()
.map(|val| match val {
Value::Data(val) => val
.downcast_arc::<Json>()
.map(|json| json.0.is_object())
.unwrap_or(false),
_ => false,
})
.collect()
))
.await
)
}
}