use std::sync::{Arc, Mutex, Condvar};
use std::thread;
use std::cell::RefCell;
#[derive(Debug)]
struct D{
name: RefCell<String>,
data: Vec<i32>
}
#[derive(Debug)]
struct A{
title: String,
data: i32
}
fn c(c:&D){
*c.name.borrow_mut() = "skfjds1234f".to_string();
// c.borrow_mut().name = "sdsdf".to_string();
// println!("{:?}", &c);
}
fn dd<T:AsMut<A>>(c:&mut T){
c.as_mut().title = "nfilnaletitle".to_string();
}
impl std::convert::AsMut<A> for A {
fn as_mut(&mut self) -> &mut A {
&mut *self
}
}
fn aaaaa(c:&mut A) {
c.as_mut().title = "hahaha".to_string();
}
fn main(){
let a = D {name: RefCell::new("a".to_string()), data: vec![1,2,3]};
// println!("{:?}", &a);
// *a.name.borrow_mut() = "sjkff".to_string();
// c(&a);
// c(RefCell::new(a));
// println!("{:?}", &a);
// let mut b = Box::new(A{title:"other".to_string(), data: 100_i32});
let mut c111 = A{title:"oc_directtrait".to_string(), data: 123456_i32};
// dd(&mut b);
// dd(&mut c);
aaaaa(&mut c111);
// println!("{:?}", &b);
println!("{:?}", &c111);
}