Skip to content

Instantly share code, notes, and snippets.

@ngoluuduythai
Created August 3, 2021 10:55
Show Gist options
  • Save ngoluuduythai/deda6ec961e4941748469e8debfb2437 to your computer and use it in GitHub Desktop.
Save ngoluuduythai/deda6ec961e4941748469e8debfb2437 to your computer and use it in GitHub Desktop.
pub fn spawn_actor(supervisor: &SupervisorRef, db_name: String, request_db: Value) {
supervisor
.children(move |children| {
children
.with_redundancy(1)
.with_distributor(Distributor::named("spawn_actor"))
.with_exec(move |ctx: BastionContext| {
let db_rs = sled::open(format!("src/database/{}", &db_name));
let request_db = request_db.clone();
let db_name = db_name.clone();
async move {
if let Ok(db) = db_rs {
if request_db["request"].as_str().unwrap() == "create" {
let value = request_db["data"].to_string();
let key = if db_name == "hub" {
"hub"
} else {
request_db["data"]["id"].as_str().unwrap()
};
create(db.clone(), key, value);
} else if request_db["request"].as_str().unwrap() == "update" {
let value = request_db["data"].to_string();
let key = if db_name == "hub" {
"hub"
} else {
request_db["data"]["id"].as_str().unwrap()
};
update(db.clone(), key, value);
} else if request_db["request"].as_str().unwrap() == "delete" {
let remove_id = request_db["id"].as_str().unwrap();
delete(db.clone(), remove_id);
} else if request_db["request"].as_str().unwrap() == "read"
&& request_db["id"].as_str().is_none()
{
let key =
if request_db["objectType"].clone().as_str().unwrap() == "camera" {
"cameras"
} else {
"hub"
};
let result: Value = query(db.clone(), key);
MessageHandler::new(ctx.recv().await?).on_question(
|_message: &str, sender| {
sender.reply(result).unwrap();
},
);
} else if request_db["request"].as_str().unwrap() == "read"
&& request_db["id"].as_str().is_some()
{
let query_id = request_db["id"].as_str().unwrap();
let result: Value = query_by_id(db.clone(), query_id);
MessageHandler::new(ctx.recv().await?).on_question(
|_message: &str, sender| {
sender.reply(result).unwrap();
},
);
}
}
Ok(())
}
})
})
.unwrap();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment