commit 24818c99e51a86d1d367b9ed64ee450a5b2c83c5 Author: Mikhail Mitrofanov Date: Wed Sep 16 10:57:26 2026 +0300 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2a0038a --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/target +.idea \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..65b3ec0 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,16 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "minicbor" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c12b4033ffaa92fbf9df03df38d19324f52bad130dd223f811734a8006dd2d69" + +[[package]] +name = "remote_marker" +version = "0.1.0" +dependencies = [ + "minicbor", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..b11f115 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "remote_marker" +version = "0.1.0" +edition = "2024" + +[dependencies] +minicbor = "2.3.0" \ No newline at end of file diff --git a/examples/demo.rs b/examples/demo.rs new file mode 100644 index 0000000..0a337ba --- /dev/null +++ b/examples/demo.rs @@ -0,0 +1,10 @@ +use remote_marker::push; + +fn main() { + println!("Hello, world!"); + push("stack", 5); + push("stack", 6); + push("stack", 8); + push("stack", 9); + push("stack", 1000); +} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..5f738fc --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,42 @@ +use minicbor::Encoder; +use std::env; +use std::net::UdpSocket; +use std::str::FromStr; + +pub fn push>(key: &str, value: T) { + send_with_header("PUSH:", key, value); +} + +pub fn set>(key: &str, value: T) { + send_with_header("SET:", key, value); +} + +fn send_with_header>(header: &str, key: &str, value: T) { + if let Some(dest) = env::var("REMOTE_MARKS").ok() { + println!("Sending with header: {}", key); + let header_len = header.len(); + let socket = UdpSocket::bind("0.0.0.0:0").unwrap(); + socket.connect(dest.as_str()).unwrap(); + let mut buffer = [0; 1024]; + buffer[..header_len].copy_from_slice(header.as_bytes()); + let mut enc = Encoder::new(&mut buffer[header_len..]); + enc.begin_array() + .unwrap() + .str_len(key.len() as u64) + .unwrap() + .str(&key) + .unwrap().encode(value).unwrap(); + + let amount = enc.writer().len(); + let encoded = buffer.len() - amount; + println!("Sending {} bytes", encoded); + let sending = &buffer[..encoded]; + _ = socket.send(&sending); + } +} + +#[cfg(test)] +mod tests { + #[test] + fn it_works() {} +}