Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// Represents some struct that holds references inside
- #[derive(Debug)]
- struct MyValue<'a> {
- number: &'a u32,
- }
- /// There are many structs similar to `MyValue` and there is a
- /// trait common to them all that can create them.
- impl<'a> From<&'a u32> for MyValue<'a> {
- fn from(value: &'a u32) -> Self {
- MyValue {
- number: value,
- }
- }
- }
- /// This produces objects that hold references into it. So the
- /// object must be dropped first before any new one is made.
- trait Producer<'a, T: 'a> {
- fn make(&'a mut self) -> T;
- }
- struct MyProducer {
- number: u32,
- }
- impl MyProducer {
- fn new() -> Self {
- Self { number: 0 }
- }
- }
- impl<'a, T: 'a + From<&'a u32>> Producer<'a, T> for MyProducer {
- fn make(&'a mut self) -> T {
- self.number += 1;
- T::from(&self.number)
- }
- }
- fn main() {
- let mut producer = MyProducer::new();
- println!("made this: {:?}", <MyProducer as Producer<MyValue>>::make(&mut producer));
- println!("made this: {:?}", <MyProducer as Producer<MyValue>>::make(&mut producer));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement