Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::cell::{Ref, RefCell};
- use std::fmt::Debug;
- use std::rc::Rc;
- #[derive(Debug)]
- struct First {}
- #[derive(Debug)]
- struct Second {}
- #[derive(Debug)]
- enum TestEnum {
- First(First),
- Second(Second),
- }
- #[derive(Debug)]
- struct FirstWrapper<'a> {
- first: &'a First,
- }
- #[derive(Debug)]
- struct SecondWrapper<'a> {
- second: &'a Second,
- }
- trait Wrapper<'a> : Debug {}
- impl<'a> Wrapper<'a> for FirstWrapper<'a> {}
- impl<'a> Wrapper<'a> for SecondWrapper<'a> {}
- fn wrap<'a>(val: &'a Ref<'a, TestEnum>) -> Box<Wrapper<'a> + 'a> {
- match &**val {
- &TestEnum::First(ref first) => Box::new(FirstWrapper { first }),
- &TestEnum::Second(ref second) => Box::new(SecondWrapper { second }),
- }
- }
- fn main() {
- let vec: Vec<Rc<RefCell<TestEnum>>> = vec![];
- let borrowed: Vec<_> = vec.iter().map(|i| i.borrow()).collect();
- let refs: Vec<Box<Wrapper>> = borrowed.iter().map(|b| wrap(b)).collect::<Vec<_>>();
- println!("{:?}", refs);
- }
Add Comment
Please, Sign In to add comment