Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061// SPDX-License-Identifier: Apache-2.0 OR MIT
#![allow(clippy::disallowed_names)]
use pin_init::*;
#[pin_data]struct SelfRef { #[uses('_: invariant)] not_cov: Box<dyn Fn(&'str str) -> bool + 'str>,
part: &'str str, str: String,
mut_part: &'mut_str mut str, #[borrowed(mut)] mut_str: String,}
fn use_self_ref() { stack_pin_init!(let foo = pin_init!(SelfRef { str: "hello world".to_owned(), part: &str[..5], mut_str: "hello world".to_owned(), mut_part: &mut mut_str[..5], not_cov: Box::new(move |s| s == str), }));
// Access via projection. println!("{}", foo.as_mut().project().part);
// Access via accessor. println!("{}", foo.part());
// Access via `with_project`, gives mutable reference. foo.as_mut().with_project(|proj| { *proj.part = &proj.str[5..]; });
println!("{}", foo.part());
// Access fields that mutable borrow others are similar to those of shared borrow. println!("{}", foo.as_mut().project().mut_part); println!("{}", foo.mut_part()); foo.as_mut().with_project(|proj| { proj.mut_part.make_ascii_uppercase(); });
// Access non-covariant type using `with_` accessor. foo.with_not_cov(|not_cov| { not_cov(""); });
// Access non-covariant type using `with_project`. foo.as_mut().with_project(|proj| (proj.not_cov)(proj.str));}
fn main() { use_self_ref();}