mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-22 17:51:53 +00:00
YANG: trivial rust implementation of show memory
This commit is contained in:
parent
1c4995f9d2
commit
1a06773cf7
2
yang/rust/.gitignore
vendored
Normal file
2
yang/rust/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Cargo.lock
|
||||||
|
target/
|
9
yang/rust/Cargo.toml
Normal file
9
yang/rust/Cargo.toml
Normal file
@ -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"
|
60
yang/rust/src/main.rs
Normal file
60
yang/rust/src/main.rs
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user