use crate::prelude::*;
use crate::registry::Registry;
use crate::tremor_fn;
use crate::EventOriginUri;
use halfbrown::hashmap;
use std::string::ToString;
pub fn load(registry: &mut Registry) {
registry
.insert(tremor_fn! (origin|as_uri_string(context) {
Ok(context.origin_uri().map(ToString::to_string).map(Value::from).unwrap_or_default())
}))
.insert(tremor_fn! (origin|as_uri_record(context) {
if let Some(uri) = context.origin_uri() {
Ok(Value::from(
hashmap! {
"scheme".into() => Value::from(uri.scheme().to_string()),
"host".into() => Value::from(uri.host().to_string()),
"port".into() => match uri.port() {
Some(n) => Value::from(n),
None => Value::null(),
},
"path".into() => Value::from(uri.path().to_vec()),
}
))
} else {
Ok(Value::null())
}
}))
.insert(tremor_fn! (origin|scheme(context) {
Ok(context.origin_uri().map(|uri| uri.scheme().to_string()).map(Value::from).unwrap_or_default())
}))
.insert(tremor_fn! (origin|host(context) {
Ok(context.origin_uri().map(|uri| uri.host().to_string()).map(Value::from).unwrap_or_default())
}))
.insert(tremor_fn! (origin|port(context) {
Ok(context.origin_uri().and_then(EventOriginUri::port).map(Value::from).unwrap_or_default())
}))
.insert(tremor_fn! (origin|path(context) {
Ok(context.origin_uri().map_or_else(
Value::null,
|uri| {
Value::from(uri.path().to_vec())
}
))
}));
}