Using macros for JSON serialization
When it comes to serializing data and returning it to the client, we can achieve this quickly with minimal code using the JSON from the Actix-web
crate. We can demonstrate this by creating a GET
view that returns all our to-do items in the views/to_do/get.rs
file:
use actix_web::{web, Responder}; use serde_json::value::Value; use serde_json::Map; use crate::state::read_file; pub async fn get() -> impl Responder { let state: Map<String, Value> = read_file("./state.json"); return web::Json(state); }
Here, we can see that we are merely reading the JSON from the JSON file and then returning the values from this wrapped in the web::Json
function. It might make sense to just return Map<String, Value>
from the JSON file directly, as it is a String
and Value
. However, the type of Map<String, Value>
does not implement the Responder
trait. We could update the function...