ratatui-kit 0.6.0

A framework for building interactive terminal user interfaces with ratatui
Documentation
use super::{AnyElement, Element, ElementType};

pub trait ExtendWithElements<T> {
    fn extend_with_elements<E: Extend<T>>(self, dest: &mut E);
}

impl<'a, T, U> ExtendWithElements<T> for Element<'a, U>
where
    U: ElementType + 'a,
    T: From<Element<'a, U>>,
{
    fn extend_with_elements<E: Extend<T>>(self, dest: &mut E) {
        dest.extend([self.into()]);
    }
}

impl<'a> ExtendWithElements<AnyElement<'a>> for AnyElement<'a> {
    fn extend_with_elements<E: Extend<AnyElement<'a>>>(self, dest: &mut E) {
        dest.extend([self]);
    }
}

impl<'a> ExtendWithElements<AnyElement<'a>> for &mut AnyElement<'a> {
    fn extend_with_elements<E: Extend<AnyElement<'a>>>(self, dest: &mut E) {
        dest.extend([self.into()]);
    }
}

impl<T, U, I> ExtendWithElements<T> for I
where
    T: From<U>,
    I: IntoIterator<Item = U>,
{
    fn extend_with_elements<E: Extend<T>>(self, dest: &mut E) {
        dest.extend(self.into_iter().map(|x| x.into()));
    }
}

pub fn extend_with_elements<T, U, E>(dest: &mut T, elements: U)
where
    U: ExtendWithElements<E>,
    T: Extend<E>,
{
    elements.extend_with_elements(dest);
}