]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
YANG: trivial rust implementation of show memory
authorVojtech Vilimek <vojtech.vilimek@nic.cz>
Thu, 8 Feb 2024 09:43:54 +0000 (10:43 +0100)
committerVojtech Vilimek <vojtech.vilimek@nic.cz>
Thu, 8 Feb 2024 09:43:54 +0000 (10:43 +0100)
yang/rust/.gitignore [new file with mode: 0644]
yang/rust/Cargo.toml [new file with mode: 0644]
yang/rust/src/main.rs [new file with mode: 0644]

diff --git a/yang/rust/.gitignore b/yang/rust/.gitignore
new file mode 100644 (file)
index 0000000..1e7caa9
--- /dev/null
@@ -0,0 +1,2 @@
+Cargo.lock
+target/
diff --git a/yang/rust/Cargo.toml b/yang/rust/Cargo.toml
new file mode 100644 (file)
index 0000000..ce3daa0
--- /dev/null
@@ -0,0 +1,9 @@
+[package]
+name = "rust"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+serde = "1.0.196"
+serde_cbor = "0.11.2"
+serde_derive = "1.0.196"
diff --git a/yang/rust/src/main.rs b/yang/rust/src/main.rs
new file mode 100644 (file)
index 0000000..0890ef7
--- /dev/null
@@ -0,0 +1,60 @@
+use std::env;
+use std::fs::File;
+use serde_derive::Deserialize;
+
+#[derive(Debug, Deserialize)]
+struct Memory {
+    effective: u32,
+    overhead: u32,
+}
+
+#[derive(Debug, Deserialize)]
+struct ShowMemoryBody {
+    routing_tables: Memory,
+    route_attributes: Memory,
+    protocols: Memory,
+    current_config: Memory,
+    standby_memory: Memory,
+    total: Memory,
+}
+
+#[derive(Debug, Deserialize)]
+struct ShowMemory {
+    header: String,
+    body: ShowMemoryBody,
+}
+
+#[derive(Debug, Deserialize)]
+struct ShowMemoryMessage {
+    /* serde does not support prefix, so we use rename work-around */
+    #[serde(rename(deserialize = "show_memory:message"))]
+    message: ShowMemory,
+
+    /* for prefixing both Serializator and Deserializator, use:
+      #[serde(rename(serialize = "show_memory:message", deserialize = "show_memory:mesage"))]
+     */
+}
+
+fn main() {
+    let args: Vec<String> = env::args().collect();
+
+    if args.len() < 2 {
+       println!("Usage: ./program {{show-memory-cbor-file}}");
+       return;
+    }
+
+    let mut file = File::open(&args[1]);
+
+    if file.is_err() {
+       println!("Error during openning file {} occured!", args[1].clone());
+       return;
+    }
+
+    let rep : Result<ShowMemoryMessage, _> = serde_cbor::from_reader(file.unwrap());
+    if let Ok(report) = rep {
+       println!("{:?}", report);
+    } else {
+       let err = rep.err().unwrap();
+       println!("Error {}", err);
+    }
+}