replayer-mx

git clone git://archive.git.mtrnord.blog/MTRNord/replayer-mx.git
Log | Files | Refs

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 }