libknot 0.2.3

High Level bindings to a subset of libknot, the library of the knot dns server
Documentation
use fallible_iterator::FallibleIterator;
use std::iter::Iterator;
use std::marker::PhantomData;

pub trait MakeFallible: Iterator + Sized {
    fn make_fallible<E>(self) -> Convert<Self, E>;
}

impl<T> MakeFallible for T
where
    T: Iterator,
{
    fn make_fallible<E>(self) -> Convert<Self, E> {
        Convert {
            inner: self,
            _phantom: PhantomData,
        }
    }
}

pub struct Convert<Iter: Iterator, E> {
    inner: Iter,
    _phantom: PhantomData<E>,
}

impl<Iter: Iterator, E> FallibleIterator for Convert<Iter, E> {
    type Item = Iter::Item;
    type Error = E;

    fn next(&mut self) -> Result<Option<Self::Item>, Self::Error> {
        Ok(self.inner.next())
    }

    fn size_hint(&self) -> (usize, Option<usize>) {
        self.inner.size_hint()
    }
}