1use serde::{Deserialize, Serialize};
2use uuid::Uuid;
3
4use crate::value::{StructureField, Value};
5
6#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
8pub struct Call {
9 #[serde(default)]
12 pub module_id: Option<Uuid>,
13 pub id: Uuid,
15 #[serde(default)]
17 pub args: Vec<StructureField>,
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
21pub struct CallResult {
22 pub ret: Value,
23 #[serde(default)]
24 pub mutated: Vec<StructureField>,
25}
26
27#[cfg(test)]
28mod tests {
29 use crate::value::{Structure, Value};
30
31 use super::*;
32 use std::str::FromStr;
33 use uuid::Uuid;
34
35 #[test]
36 pub fn parse_call_test() {
37 let call: Call = serde_yaml::from_str(CALL_TEST).unwrap();
38 assert_eq!(
39 call.id,
40 Uuid::from_str("07f5740c-ba4a-45af-8ec5-bedde5737e99").unwrap()
41 );
42 if let Value::Structure(Structure { id, fields }) = &call.args[1].value.as_ref() {
43 assert_eq!(
44 *id,
45 Uuid::from_str("7f9aedf8-dbde-4020-b5f4-c28a6635ae7c").unwrap()
46 );
47 if let Value::I32(v) = fields[1].value.as_ref() {
48 assert_eq!(*v, 113);
49 } else {
50 panic!("expected i32 value under second field of struct arg");
51 }
52 } else {
53 panic!("expected a string under arg 55dbec70-1c3a-433e-a6e6-27446b7f065e");
54 }
55 }
56
57 #[test]
58 pub fn parse_call_test_2() {
59 let call: Call = serde_yaml::from_str(CALL_TEST_2).unwrap();
60 assert_eq!(
61 call.id,
62 Uuid::from_str("b213a552-77ad-465a-a26d-352e8eccfd63").unwrap()
63 );
64 assert_eq!(call.args.len(), 2);
65 }
66
67 pub const CALL_TEST: &str = "\
68id: 07f5740c-ba4a-45af-8ec5-bedde5737e99
69args:
70- id: b41899c3-66dc-40d4-ab61-d1ccf5231c88
71 value:
72 enum:
73 id: 325a5767-e344-4532-860e-0749bcf2e428
74 variant_id: 766e9e9a-446d-4e46-83e6-14b7ca101169
75 value: unit
76- id: 63086e48-804f-403a-8862-3358ddedc08d
77 value:
78 struct:
79 id: 7f9aedf8-dbde-4020-b5f4-c28a6635ae7c
80 fields:
81 - id: 7d94a956-e50d-4cc4-9714-f62e1f9b134e
82 value:
83 enums:
84 id: 325a5767-e344-4532-860e-0749bcf2e428
85 elements:
86 - variant_id: 2468f46c-bb60-425c-9a4d-9ad326ccc7e2
87 value: unit
88 - id: 5ffa9104-1e5c-4026-943f-8db38bd34563
89 value:
90 i32: 113
91";
92
93 pub const CALL_TEST_2: &str = "\
94id: b213a552-77ad-465a-a26d-352e8eccfd63
95args:
96- id: 55dbec70-1c3a-433e-a6e6-27446b7f065e
97 value:
98 u32: 42
99- id: abf9ca4e-e03f-431a-a32b-4911f809c399
100 value:
101 u32: 64
102";
103}