Rustで詰んだ。助けてもらった。

Rustで借用で詰んでしまったので
slackのrust-jpのチームに助けてもらいました。

//エラーが出る方
extern crate gtk;
use gtk::prelude::*;
struct User {
    id: u8,
    active: bool
}
impl User {
    fn new(_id: u8) -> User{ User{id: _id, active: false} }
    fn get_active(&self) -> bool { self.active }
    fn toggle_active(&mut self){ self.active = !self.active; }
}
fn main(){
    let id = 1;
    let mut user = User::new(id);
    if gtk::init().is_err() {
        println!("faild to  initialize GDK");
        return;
    }
    // window
    let window = gtk::Window::new(gtk::WindowType::Toplevel);
    window.set_title("Knock");
    window.set_border_width(10);
    window.set_position(gtk::WindowPosition::Center);
    window.set_default_size(200, 100);
    window.connect_delete_event(|_, _|{
        gtk::main_quit();
        Inhibit(false)
    });
    //user_box
    let button = gtk::Button::new_with_label("online");
    let _window = window.clone();
    button.connect_clicked( move |btn| {
        if user.get_active() {
            btn.set_label("online");
            println!("online");
        } else {
            btn.set_label("offline");
            println!("offline");
        }
       user.toggle_active(); //<<<<<ここでエラーが上がる。
    });
    window.add(&button);
    window.show_all();
    gtk::main();
}
//いける
extern crate gtk;
use gtk::prelude::*;
use std::cellRefCell;
struct User {
    id: u8,
    active: bool
}
impl User {
    fn new(_id: u8) -> User{ User{id: _id, active: false} }
    fn get_active(&self) -> bool { self.active }
    fn toggle_active(&mut self){ self.active = !self.active; }
}
fn main(){
    let id = 1;
    let user = User::new(id);
    let mut user = RefCell::new(user);
    if gtk::init().is_err() {
        println!("faild to  initialize GDK");
        return;
    }
    // window
    let window = gtk::Window::new(gtk::WindowType::Toplevel);
    window.set_title("Knock");
    window.set_border_width(10);
    window.set_position(gtk::WindowPosition::Center);
    window.set_default_size(200, 100);
    window.connect_delete_event(|_, _|{
        gtk::main_quit();
        Inhibit(false)
    });
    //user_box
    let button = gtk::Button::new_with_label("online");
    let _window = window.clone();
    button.connect_clicked( move |btn| {
        if user.get_active() {
            btn.set_label("online");
            println!("online");
        } else {
            btn.set_label("offline");
            println!("offline");
        }
        user.borrow_mut().toggle_active();
    });
    window.add(&button);
    window.show_all();
    gtk::main();
}

こんな感じでRefCellを使うと動くようになりました!
Rust面白い!