pub trait IqPath {
fn keys(&self) -> impl Iterator<Item = &str>;
fn iq_path(&self) -> Vec<String> {
self.keys().map(|s| s.to_string()).collect()
}
}
impl IqPath for &Vec<String> {
fn keys(&self) -> impl Iterator<Item = &str> {
self.iter().map(|s| s.as_str())
}
}
impl IqPath for &Vec<&str> {
fn keys(&self) -> impl Iterator<Item = &str> {
self.iter().copied()
}
}
impl IqPath for &[String] {
fn keys(&self) -> impl Iterator<Item = &str> {
self.iter().map(|s| s.as_str())
}
}
impl<const N: usize> IqPath for &[&str; N] {
fn keys(&self) -> impl Iterator<Item = &str> {
self.iter().copied()
}
}
impl IqPath for &[&str] {
fn keys(&self) -> impl Iterator<Item = &str> {
self.iter().copied()
}
}
impl IqPath for Vec<&str> {
fn keys(&self) -> impl Iterator<Item = &str> {
self.iter().copied()
}
}
impl IqPath for &str {
fn keys(&self) -> impl Iterator<Item = &str> {
self.split('.')
}
}