stage 1

Create the basic framework

#[get("/task/<id>")]
fn get_task_by_id( id: u32) -> String {
	...
}


fn main() {
	...
	rocket::ignite()
		.mount("/", routes![get_task_by_id])
		.launch();
}
#[derive(Serialize,Deserialize,Debug)]
pub struct Task  {
    pub element: u32,
    pub name: String,
}

impl Task {
	pub fn new(element: u32, name: String) -> Self { Self { element, name } }
}
type TaskHashMap = HashMap<u32,Task>;

pub struct TaskList  {
	pub tasks :  TaskHashMap,
}
#[post("/tasks", data = "<t>")]
fn add_task(state: State<tasks::TaskList>, t: Json<Task>) -> String {...}

...

fn main() {
    let task_db= tasks::TaskList::new();
 
    rocket::ignite()
        .mount("/", routes![get_tasks,add_task,get_task_by_id])
        .manage(task_db)
        .launch();
}

type TaskHashMap = HashMap<u32,Task>;

pub struct TaskList  {
	pub tasks :  Arc<RwLock<TaskHashMap>>,
}

impl  TaskList {
	pub fn new() -> TaskList {
		TaskList {
			tasks : Arc::new(RwLock::new(TaskHashMap::new())),
		}
	}
	...
}

//in main functions

#[post("/tasks", data = "<t>")]
fn add_task(state: State<tasks::TaskList>, t: Json<Task>) -> String {
	let tl =  self.tasks.clone();
	let mut my_tasks = tl.read().expect("RWLOCK poisoned");	

    //we should get the request body here and read in the json body
    let o = tasks::Task::new(...);

    //insert the object 
    let r = match my_tasks.insert(new_id, o) {
		...
    };
	...
}
    //
    // Save list after each addition (inefficient but works) 
    // no particular location
    let f = OpenOptions::new()
        .read(true)
        .write(true)
        .create(true)
        .open("tasklist.json").unwrap();

	//use a buffer
    let fb = std::io::BufWriter::new(f);
	//collect the tasks and put into a vector to serialize
    let my_vec: Vec<&Task> = my_tasks.iter().map(|(_,v)| v.clone()).collect();
	//use serde to actually save it.
    serde_json::ser::to_writer_pretty(fb, &my_vec).expect("Failed to write");
    r

Back to index page of the project is about getting the initial rust API running.