diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib.rs | 2 | ||||
-rw-r--r-- | src/main.rs | 27 | ||||
-rw-r--r-- | src/occurence.rs | 25 | ||||
-rw-r--r-- | src/protocol.rs | 30 |
4 files changed, 84 insertions, 0 deletions
diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..0d96cad --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,2 @@ +pub mod protocol; +pub mod occurence;
\ No newline at end of file diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..a26a1dd --- /dev/null +++ b/src/main.rs @@ -0,0 +1,27 @@ + +use std::io::{BufRead, BufReader}; +use std::os::unix::net::{UnixListener, UnixStream}; +use std::thread; + +fn handle_client(stream: UnixStream) { + let stream = BufReader::new(stream); + for line in stream.lines() { + println!("{}", line.unwrap()); + } +} + +fn main() { + let listener = UnixListener::bind("/run/user/1000/calendar").unwrap(); + + for stream in listener.incoming() { + match stream { + Ok(stream) => { + thread::spawn(|| handle_client(stream)); + } + Err(err) => { + println!("Error: {}", err); + break; + } + } + } +} diff --git a/src/occurence.rs b/src/occurence.rs new file mode 100644 index 0000000..104438a --- /dev/null +++ b/src/occurence.rs @@ -0,0 +1,25 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize)] +pub enum Condition { + And(Vec<Condition>), + Or(Vec<Condition>), + From(Box<Condition>), + To(Box<Condition>), + + Year(Range), + Monthofyear(Range), + Weekofmonth(Range), + Dayofyear(Range), + Dayofmonth(Range), + Dayofweek(Range), + + Hour(Range), + Minute(Range), + Second(Range), + + Unix(Range), +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct Range(u64, u64); diff --git a/src/protocol.rs b/src/protocol.rs new file mode 100644 index 0000000..fdd84d4 --- /dev/null +++ b/src/protocol.rs @@ -0,0 +1,30 @@ +use serde::{Deserialize, Serialize}; + +use crate::occurence::Condition; + +#[derive(Debug, Serialize, Deserialize)] +pub enum ClientboundPacket { + Handshake { version: String }, + DownloadResponse(Vec<Task>), +} + +#[derive(Debug, Serialize, Deserialize)] +pub enum ServerboundPacket { + Download, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct Task { + name: String, + description: String, + + tags: Vec<String>, + priority: f64, + + completed: u64, + scheduled: u64, + + occurence: Option<Condition>, + deadline: Option<Condition>, +} + |