use anyhow::Result; use bgpkit_parser::models::ElemType; use bgpkit_parser::BgpElem; use ribeye::{MessageProcessor, RibEye, RibMeta}; #[derive(Default)] struct EntryCounter { a_count: usize, w_count: usize, } impl EntryCounter { pub fn new() -> Self { Self { a_count: 0, w_count: 0, } } } impl MessageProcessor for EntryCounter { fn name(&self) -> String { "basic_counter".to_string() } fn output_paths(&self) -> Option { todo!() } fn reset_processor(&mut self, rib_meta: &RibMeta) { todo!() } fn process_entry(&mut self, elem: &BgpElem) -> Result<()> { match elem.elem_type { ElemType::ANNOUNCE => { self.a_count += 1; } ElemType::WITHDRAW => { self.w_count += 1; } } Ok(()) } fn output(&mut self) -> Result<()> { println!( "{}: {} announcements, {} withdrawals", self.name(), self.a_count, self.w_count ); Ok(()) } } fn main() { let mut ribeye = RibEye::new(); ribeye .add_processor(EntryCounter::new().to_boxed()) .unwrap(); ribeye .process_mrt_file("https://data.ris.ripe.net/rrc21/2023.08/updates.20230806.1640.gz") .unwrap(); }