Module druid::lens

source ·
Expand description

Implementations of Lens, a way of focusing on subfields of data.

Lenses are useful whenever a widget only needs access to a subfield of a larger struct or generally access to part of a larger value.

For example: If one wants to embed a TextBox in a widget with a Data type that is not String, they need to specify how to access a String from within the Data.

use druid::{Data, Lens, Widget, WidgetExt, widget::{TextBox, Flex}};

#[derive(Clone, Debug, Data, Lens)]
struct MyState {
    search_term: String,
    scale: f64,
    // ...

fn my_sidebar() -> impl Widget<MyState> {
    // `TextBox` is of type `Widget<String>`
    // via `.lens` we get it to be of type `Widget<MyState>`.
    // `MyState::search_term` is a lens generated by the `derive(Lens)` macro,
    // that provides access to the search_term field.
    let searchbar = TextBox::new().lens(MyState::search_term);

    // ...

    // We can now use `searchbar` just like any other `Widget<MyState>`

Most of the time, if you want to create your own lenses, you need to use #[derive(Lens)].


  • A lens that always gives the same value and discards changes.
  • Lens for invoking Deref and DerefMut on a type.
  • Lens accessing a member of some type using accessor functions
  • The identity lens: the lens which does nothing, i.e. exposes exactly the original value.
  • A Lens that exposes data within an Arc with copy-on-write semantics
  • Lens for indexing containers
  • Lens built from a getter and a setter
  • Lens for invoking AsRef and AsMut on a type.
  • Lens composed of two lenses joined together
  • A Lens that always yields ().


  • A lens is a datatype that gives access to a part of a larger data structure.
  • Helpers for manipulating Lenses