/// Rust-side wrapper around a Swift class implementing the `{{ trait_name }}` plugin protocol.
///
/// The Swift instance is held via a `swift-bridge` opaque handle that retains
/// the underlying ARC reference for the lifetime of this struct. Send + Sync are
/// asserted unsafely: Swift classes used as generated plugins must be thread-safe
/// (the `Plugin` super-trait requires it), and ARC handles themselves are safe to share.
pub struct {{ wrapper_name }} {
inner: ffi::{{ box_name }},
/// Cached `Plugin::name()` — required because the trait returns `&str` but
/// the Swift FFI shim returns an owned `String`. Populated lazily on first access.
name_cache: ::std::sync::OnceLock<String>,
}
unsafe impl Send for {{ wrapper_name }} {}
unsafe impl Sync for {{ wrapper_name }} {}
impl {{ wrapper_name }} {
/// Construct a new wrapper from a Swift `{{ box_name }}` handle.
pub fn new(inner: ffi::{{ box_name }}) -> Self {
Self { inner, name_cache: ::std::sync::OnceLock::new() }
}
}