1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
use std::marker::PhantomData;
/// Navigator type describing a skipped element
pub struct Skip;
/// Navigator type describing the target element
pub struct Take;
/// A value which can be used with the `BorrowBag` to borrow the element which was added.
///
/// See [`BorrowBag`][BorrowBag] for usage examples.
///
/// [BorrowBag]: struct.BorrowBag.html
pub struct Handle<T, N> {
phantom: PhantomData<(T, N)>,
}
/// Creates a new `Handle` of any given type.
pub(crate) fn new_handle<T, N>() -> Handle<T, N> {
Handle {
phantom: PhantomData,
}
}
impl<T, N> Clone for Handle<T, N> {
fn clone(&self) -> Handle<T, N> {
new_handle()
}
}
// Derived `Copy` doesn't work here.
impl<T, N> Copy for Handle<T, N> {}