xengui 0.2.7

a retained-mode gui library in rust
Documentation
// SPDX-License-Identifier: Apache-2.0
use crate::Widget;
use std::fmt::Write;

pub(crate) type PathCheckpoint = usize;

pub(crate) struct WidgetPath {
    buf: String,
}

impl WidgetPath {
    pub(crate) fn new() -> Self {
        Self { buf: String::new() }
    }

    #[inline]
    pub(crate) fn as_str(&self) -> &str {
        &self.buf
    }

    #[inline]
    pub(crate) fn checkpoint(&self) -> PathCheckpoint {
        self.buf.len()
    }

    #[inline]
    pub(crate) fn restore(&mut self, checkpoint: PathCheckpoint) {
        self.buf.truncate(checkpoint);
    }

    pub(crate) fn push(&mut self, widget: &dyn Widget, index: usize) {
        if !self.buf.is_empty() {
            self.buf.push('.');
        }

        if let Some(key) = widget.get_key() {
            self.buf.push('k');
            self.buf.push_str(key);
        } else {
            write!(&mut self.buf, "{index}").unwrap();
        }
    }
}