subgraph/graphql/entity/create_field/resolve_nested/get_parent_value/
mod.rs

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