iced_focus 0.1.1

A proc-macro to derive a focus chain for Iced applications
Documentation
use iced::text_input;
use iced_focus::Focus;

#[derive(Focus)]
enum Example {
    One(#[focus(enable)] text_input::State),
    Two(
        #[focus(enable)] text_input::State,
        #[focus(enable)] text_input::State,
    ),
}

fn main() {
    let mut example = Example::One(text_input::State::new());
    assert!(!example.has_focus());
    if let Example::One(ref t_0) = example {
        assert!(!t_0.has_focus());
    }

    assert_eq!(
        example.focus(iced_focus::Direction::Forwards),
        iced_focus::State::Kept
    );
    assert!(example.has_focus());
    if let Example::One(ref t_0) = example {
        assert!(t_0.has_focus());
    }

    assert_eq!(
        example.focus(iced_focus::Direction::Forwards),
        iced_focus::State::Returned
    );
    assert!(!example.has_focus());
    if let Example::One(ref t_0) = example {
        assert!(!t_0.has_focus());
    }

    example = Example::Two(text_input::State::new(), text_input::State::new());
    assert!(!example.has_focus());
    if let Example::Two(ref t_0, ref t_1) = example {
        assert!(!t_0.has_focus());
        assert!(!t_1.has_focus());
    }

    assert_eq!(
        example.focus(iced_focus::Direction::Forwards),
        iced_focus::State::Kept
    );
    assert!(example.has_focus());
    if let Example::Two(ref t_0, ref t_1) = example {
        assert!(t_0.has_focus());
        assert!(!t_1.has_focus());
    }

    assert_eq!(
        example.focus(iced_focus::Direction::Forwards),
        iced_focus::State::Kept
    );
    assert!(example.has_focus());
    if let Example::Two(ref t_0, ref t_1) = example {
        assert!(!t_0.has_focus());
        assert!(t_1.has_focus());
    }

    assert_eq!(
        example.focus(iced_focus::Direction::Forwards),
        iced_focus::State::Returned
    );
    assert!(!example.has_focus());
    if let Example::Two(ref t_0, ref t_1) = example {
        assert!(!t_0.has_focus());
        assert!(!t_1.has_focus());
    }
}