I am building a simple command-line todo app in Rust. If I don't implement the copy trait I get this error: "move occurs because 'todo' has type 'todo::Todo', which does not implement the 'Copy' trait". When I try to implement the Copy trait for my Todo struct, I receive the following error: "field text: String does not implement the Copy trait". How do I fix this error? My code is below:
pub type todo_type = Vec<Todo>;
#[derive(Copy)]
pub struct Todo {
id: usize,
text: String,
completed: bool,
}
impl Todo {
pub fn new(text: String, id: usize) -> Todo {
Todo {
text,
id,
completed: false,
}
}
}
pub struct Todos {
todos: todo_type,
}
impl Todos {
pub fn new(todos: todo_type) -> Todos {
Todos { todos }
}
pub fn get_all_todos(self) -> todo_type {
self.todos
}
pub fn get_single_todo(self, todo_index: usize) -> Todo {
unimplemented!()
}
pub fn add_todo(self, text: String) -> Todo {
let id: usize = 1;
if self.todos.len() == 0 {
let id = 1;
} else {
let last_todo = match self.todos.len() {
0 => None,
n => Some(&self.todos[n - 1]),
};
let id = last_todo.unwrap().id;
}
let todo = Todo::new(text, id);
self.todos.push(todo);
todo
}
pub fn remove_todo(self, todo_index: usize) -> bool {
self.todos.remove(todo_index);
true
}
}
Clone
, by adding#[derive(Clone)]
which will make your struct provides theclone()
function. – Nadeauadd_todo
to returnTodo
, and why do you need every single method onTodos
consumeself
? – SandiTodo
. Do you have any idea on how to solve this error:cannot borrow
self.todos` as mutable, asself
is not declared as mutable`? – Oghamself
withmut self
– Ogham