aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs2
-rw-r--r--src/main.rs27
-rw-r--r--src/occurence.rs25
-rw-r--r--src/protocol.rs30
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>,
+}
+