Skip to main content

vv_agent/types/dict/
tools.rs

1use super::common::*;
2use super::*;
3
4impl ToolExecutionResult {
5    pub fn to_dict(&self) -> Value {
6        let mut payload = serde_json::Map::from_iter([
7            (
8                "tool_call_id".to_string(),
9                Value::String(self.tool_call_id.clone()),
10            ),
11            ("content".to_string(), Value::String(self.content.clone())),
12            (
13                "directive".to_string(),
14                Value::String(tool_directive_value(self.directive).to_string()),
15            ),
16            (
17                "status".to_string(),
18                Value::String(tool_result_simple_status(self.status).to_string()),
19            ),
20            (
21                "status_code".to_string(),
22                Value::String(tool_result_status_value(self.status).to_string()),
23            ),
24        ]);
25        insert_optional_string(&mut payload, "error_code", &self.error_code);
26        if !self.metadata.is_empty() {
27            payload.insert("metadata".to_string(), metadata_to_value(&self.metadata));
28        }
29        insert_optional_string(&mut payload, "image_url", &self.image_url);
30        insert_optional_string(&mut payload, "image_path", &self.image_path);
31        Value::Object(payload)
32    }
33
34    pub fn from_dict(data: &Value) -> Result<Self, String> {
35        let object = expect_object(data, "ToolExecutionResult")?;
36        let status = match read_optional_string(object, "status_code").as_deref() {
37            Some(status_code) => parse_tool_result_status(status_code)?,
38            None => parse_simple_tool_result_status(
39                read_optional_string(object, "status")
40                    .as_deref()
41                    .unwrap_or("success"),
42            )?,
43        };
44        Ok(Self {
45            tool_call_id: read_string(object, "tool_call_id").unwrap_or_default(),
46            content: read_string(object, "content").unwrap_or_default(),
47            status,
48            directive: parse_tool_directive(
49                read_optional_string(object, "directive")
50                    .as_deref()
51                    .unwrap_or("continue"),
52            )?,
53            error_code: read_optional_string(object, "error_code"),
54            metadata: read_metadata(object, "metadata")?,
55            image_url: read_optional_string(object, "image_url"),
56            image_path: read_optional_string(object, "image_path"),
57        })
58    }
59}