diff --git a/rust/src/main.rs b/rust/src/main.rs index e025cd3..ce11863 100644 --- a/rust/src/main.rs +++ b/rust/src/main.rs @@ -1,131 +1,69 @@ #![allow(dead_code, unused)] -mod log_handler; +use std::fs::read; use chrono::{ - DateTime, Local, + DateTime, + Local, +}; +use clap::{ + Args, + Parser, + Subcommand }; -use clap::{Args, Parser, Subcommand}; use sqlx::{ - database, migrate::MigrateDatabase, query, query_as, sqlite::{ + migrate::MigrateDatabase, + query, + query_as, + Row, + sqlite::{ SqlitePool, SqlitePoolOptions, - }, Row, Sqlite + }, + Sqlite, +}; +use tokio::{ + fs, + io::{ + AsyncReadExt, + AsyncWriteExt, + }, + net::{ + TcpListener, + TcpStream, + }, + time::{ + Duration, + sleep, + }, }; - -use log_handler::{LogType, Logger}; - -const DATABASE_URL: &str = "./test.db"; -const NAME_LOG_TABLE: &str = "logs"; -const NAME_TEST_TABLE: &str = "tests"; - -#[derive(Parser, Debug)] -#[clap(author, version, about, long_about=None)] -struct Arguments { - /// subcommand - #[command(subcommand)] - pub action: Action, -} - -#[allow(non_camel_case_types)] -#[derive(Debug, Clone, Subcommand)] -pub enum Action { - /// perform action on logs - #[command(subcommand)] - log(LogAction), - - /// perform action on tests - #[command(subcommand)] - test(TestAction), -} - -#[allow(non_camel_case_types)] -#[derive(Debug, Clone, Subcommand)] -pub enum LogAction { - add(LogAddArgs), - get(LogGetArgs), - remove(LogRemoveArgs), - show(LogShowArgs), -} - -#[allow(non_camel_case_types)] -#[derive(Debug, Clone, Subcommand)] -pub enum TestAction { - add(TestArgs), - remove(TestArgs), - show, -} - -#[derive(Debug, Clone, Args)] -pub struct LogAddArgs { - log_type: String, - log_test: String, - log_message: String, -} - -#[derive(Debug, Clone, Args)] -pub struct LogGetArgs { - id: usize, -} - -#[derive(Debug, Clone, Args)] -pub struct LogRemoveArgs { - range_start: usize, - range_stop: usize, -} - -#[derive(Debug, Clone, Args)] -pub struct LogShowArgs { - range_start: Option, - range_stop: Option, -} - -#[derive(Clone, Debug, Args)] -pub struct TestArgs { - test_name: String, -} #[tokio::main] async fn main() -> anyhow::Result<()> { - let args = Arguments::try_parse()?; - let logger = Logger::setup().await.unwrap(); - let read_logger = logger.clone(); + let listener = TcpListener::bind("127.0.0.1:9090").await?; - match args.action { - Action::log(subaction) => { - match subaction { - LogAction::add(args) => { - logger.add_log(LogType::from_str(&args.log_type.as_str())?, &args.log_test, &args.log_message).await.unwrap(); - } - LogAction::get(args) => { - let record = logger.query_for_log(&format!("DELETE FROM logs WHERE log_id = {} RETURNING log_id, log_time, test_name, log_message;", args.id)).await.unwrap(); - println!("record: {:#?}", record); - } - LogAction::remove(args) => { - _ = logger.query(&format!("DELETE FROM logs WHERE log_id BETWEEN {} AND {};", args.range_start, args.range_stop)).await; - } - LogAction::show(args) => { - // let records = read_logger.query_for_log(&format!("SELECT log_id, log_time, log_type, test_name, log_message FROM logs;")).await.unwrap(); - let records = read_logger.query_for_log(&format!("SELECT * FROM logs;")).await.unwrap(); - println!("records: {:#?}", records); - } - } + let file = fs::read("test.md").await?; + + tokio::spawn(async move { + sleep(Duration::from_secs(2)).await; + + let mut connection = TcpStream::connect("127.0.0.1:9090").await.unwrap(); + connection.write_all(&file[..]).await.unwrap(); + }); + + let mut read_buffer = [0u8; 2<<16]; + match listener.accept().await { + Ok((mut stream, address)) => { + println!("accepted connection request from {}", address); + let size = stream.read(&mut read_buffer).await?; + fs::write("test-copy.md", &read_buffer[0..size]).await?; } - Action::test(subaction) => { - match subaction { - TestAction::add(args) => { - logger.add_test(args.test_name.as_str(), Local::now()).await?; - } - TestAction::remove(args) => { - logger.remove_test(args.test_name.as_str()).await?; - } - TestAction::show => { - let tests = logger.get_tests(None).await?; - println!("tests: {:#?}", tests); - } - } + Err(error) => { + println!("this is unexpected.. {}", error.to_string()); } } Ok(()) } + +