use crate::python::resolved_varnode::PythonResolvedVarNode;
use pyo3::{PyRef, PyRefMut, pyclass, pymethods};

#[pyclass(unsendable)]
pub struct VarNodeIterator {
    vn: Box<dyn Iterator<Item = PythonResolvedVarNode>>,
}

impl VarNodeIterator {
    pub fn new<T: Iterator<Item = PythonResolvedVarNode> + 'static>(t: T) -> Self {
        Self { vn: Box::new(t) }
    }
}
#[pymethods]
impl VarNodeIterator {
    pub fn __iter__(slf: PyRef<Self>) -> PyRef<Self> {
        slf
    }

    pub fn __next__(mut slf: PyRefMut<Self>) -> Option<PythonResolvedVarNode> {
        slf.vn.next()
    }
}

impl Iterator for VarNodeIterator {
    type Item = PythonResolvedVarNode;

    fn next(&mut self) -> Option<Self::Item> {
        self.vn.next()
    }
}
