sdl_parser/
library_item.rs1use anyhow::{Ok, Result};
2use serde::{Deserialize, Serialize};
3
4use crate::{node::NodeType, parse_sdl};
5
6#[derive(PartialEq, Debug, Serialize, Deserialize, Clone, Ord, PartialOrd, Eq)]
7pub struct LibraryItem {
8 pub name: String,
9 pub version: String,
10}
11
12impl LibraryItem {
13 #[allow(dead_code)]
14 fn new(name: String, version: String) -> Self {
15 Self { name, version }
16 }
17}
18
19#[allow(dead_code)]
20pub fn generate_package_list(sdl_string: &str) -> Result<Vec<LibraryItem>> {
21 let nodes = parse_sdl(sdl_string)?.nodes;
22 let mut result = Vec::new();
23
24 if let Some(nodes) = nodes {
25 for (_, node) in nodes {
26 match node.type_field {
27 NodeType::VM(vm) => {
28 if let Some(source) = &vm.source {
29 result.push(LibraryItem::new(
30 source.name.clone(),
31 source.version.clone(),
32 ));
33 }
34 }
35 _ => continue,
36 }
37 }
38 }
39 Ok(result)
40}
41
42#[cfg(test)]
43mod tests {
44 use super::*;
45
46 #[test]
47 fn generate_package_list_based_on_sdl() {
48 let node_sdl = r#"
49 name: test-scenario
50 nodes:
51 win10-1:
52 type: VM
53 description: win10 node for OCR
54 resources:
55 ram: 4 gib
56 cpu: 4
57 source:
58 name: basic-windows10
59 version: "1.0"
60 deb-10-1:
61 type: VM
62 description: deb-10-description
63 resources:
64 ram: 4 gib
65 cpu: 4
66 source:
67 name: debian10
68 version: "1.2.4"
69 win-10-2:
70 type: VM
71 description: win10 node for OCR
72 resources:
73 ram: 4 gib
74 cpu: 4
75 source: windows10-template
76 win-10-3:
77 type: VM
78 description: win10 node for OCR
79 resources:
80 ram: 4 gib
81 cpu: 4
82 source: windows10
83 "#;
84 let mut library_items = generate_package_list(node_sdl).unwrap();
85 library_items.sort();
86
87 insta::assert_debug_snapshot!(library_items);
88 }
89}