teo_runtime/handler/default/
find_unique.rs1use key_path::path;
2use crate::value::Value;
3use crate::response::Response;
4use crate::action::action::*;
5use crate::request::Request;
6
7pub async fn find_unique(request: Request) -> teo_result::Result<Response> {
8 let model = request.transaction_ctx().namespace().model_at_path(&request.handler_match()?.path()).unwrap().clone();
9 let action = FIND | SINGLE | ENTRY;
10 let result = request.transaction_ctx().find_unique_internal(
11 &model,
12 request.body_value()?,
13 false,
14 action,
15 Some(request.clone()),
16 path![],
17 ).await?;
18 match result {
19 None => Ok(Response::data(Value::Null)),
20 Some(obj) => {
21 let obj_data = obj.to_teon_internal(&path!["data"]).await?;
22 Ok(Response::data(obj_data))
23 }
24 }
25}
26