teo_runtime/handler/default/
find_unique.rs

1use 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