subgraph/graphql/entity/create_field/resolve_nested/get_parent_value/
mod.rs1use async_graphql::{ErrorExtensions, Value};
2use log::{debug, error, trace};
3
4use crate::graphql::entity::ServiceEntity;
5
6impl ServiceEntity {
7 pub fn get_parent_value(
8 parent_value: &Value,
9 field_name: &str,
10 ) -> Result<serde_json::Value, async_graphql::Error> {
11 debug!(
12 "Getting Value, {:?}, from parent, {:?}",
13 field_name, parent_value
14 );
15
16 let parent_value = match parent_value.clone().into_json() {
17 Ok(value) => value,
18 Err(_) => {
19 error!("Invalid JSON Object - Failed to convert to JSON");
20 return Err(async_graphql::Error::new(
21 "Invalid JSON Object - Failed to convert to JSON",
22 )
23 .extend_with(|_err, e| {
24 e.set("field", field_name);
25 }));
26 }
27 };
28
29 let parent_value = if parent_value.is_string() {
30 let json_str = match parent_value.as_str() {
31 Some(value) => value,
32 None => {
33 error!("Invalid JSON Object - Failed to convert to JSON string");
34 return Err(async_graphql::Error::new(
35 "Invalid JSON Object - Failed to convert to JSON string",
36 )
37 .extend_with(|_err, e| {
38 e.set("field", field_name);
39 }));
40 }
41 };
42
43 match serde_json::from_str(&json_str) {
44 Ok(value) => value,
45 Err(_) => {
46 error!("Invalid JSON Object - Failed to convert to JSON object");
47 return Err(async_graphql::Error::new(
48 "Invalid JSON Object - Failed to convert to JSON object",
49 )
50 .extend_with(|_err, e| {
51 e.set("field", field_name);
52 }));
53 }
54 }
55 } else {
56 parent_value
57 };
58
59 trace!("Parent Value: {:?}", parent_value);
60
61 Ok(parent_value)
62 }
63}