main.rs (2200B)
1 use clap::Parser; 2 use color_eyre::eyre::{eyre, Result}; 3 use minicbor::display; 4 use std::{ 5 fs::File, 6 io::{BufReader, Read}, 7 }; 8 9 use crate::events::{ 10 common::Unsigned, 11 message::{RoomMessageContent, TextContent}, 12 Content, Event, 13 }; 14 15 mod events; 16 17 #[derive(Parser, Debug)] 18 #[clap(author, version, about, long_about = None)] 19 struct Args { 20 #[clap(short, long)] 21 write: bool, 22 #[clap(short, long)] 23 read: bool, 24 } 25 26 fn main() -> Result<()> { 27 color_eyre::install()?; 28 let args = Args::parse(); 29 30 if args.read && args.write || !args.read && !args.write { 31 return Err(eyre!("Either read or write must be specified")); 32 } 33 34 if args.read { 35 let file = File::open("data.cbor")?; 36 let mut reader = BufReader::new(file); 37 let mut buffer = Vec::new(); 38 39 // Read file into vector. 40 reader.read_to_end(&mut buffer)?; 41 let output: Event = minicbor::decode(&buffer)?; 42 println!("{:#?}", output); 43 } else if args.write { 44 let data: Event = Event { 45 content: Content::RoomMessage(RoomMessageContent::Text(TextContent { 46 body: "This is a test".into(), 47 format: None, 48 formatted_body: None, 49 })), 50 room_id: "!KwXDovBFhYakswlOwN:nordgedanken.dev".into(), 51 event_id: "$ip5l5n9ckymoybrwh-jl8BDYl8HCv2nO1d4NCFp4ek0".into(), 52 sender: "@nordgedanken:nordgedanken.dev".into(), 53 origin_server_ts: 1650133746117, 54 unsigned: Unsigned { 55 age: 405, 56 transaction_id: "m1650132888916.13".into(), 57 prev_content: None, 58 redacted_because: None, 59 }, 60 state_key: None, 61 }; 62 { 63 let mut data_file = File::create("data.cbor")?; 64 minicbor::encode(&data, &mut data_file)?; 65 } 66 { 67 let file = File::open("data.cbor")?; 68 let mut reader = BufReader::new(file); 69 let mut buffer = Vec::new(); 70 71 // Read file into vector. 72 reader.read_to_end(&mut buffer)?; 73 74 println!("{}", display(&buffer)); 75 } 76 } 77 78 Ok(()) 79 }