diff --git a/.gitea/workflows/check-format-and-test.yaml b/.gitea/workflows/check-format-and-test.yaml index 4574188..f21e58b 100644 --- a/.gitea/workflows/check-format-and-test.yaml +++ b/.gitea/workflows/check-format-and-test.yaml @@ -5,13 +5,13 @@ on: jobs: build: - container: docker.io/rust:1.79.0-alpine3.20 + container: docker.io/rust:1.98.1-alpine3.24 steps: - name: Install the dependencies run: | rustup component add clippy rustfmt && apk update && - apk add musl-dev git npm + apk add musl-dev git npm - name: Checkout the code uses: actions/checkout@v3 diff --git a/README.md b/README.md index 208113c..3e371db 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ # R701 🕰️ [![Rust](https://img.shields.io/badge/Rust-f74c00?logo=rust)](https://www.rust-lang.org) -[![Brain made](https://img.shields.io/badge/Brainmade-grey?logo=data:image/svg%2bxml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgd2lkdGg9IjY2LjUzOCIKICAgaGVpZ2h0PSI3OC43ODIiCiAgIGZpbGw9Im5vbmUiCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzMiCiAgIHNvZGlwb2RpOmRvY25hbWU9IndoaXRlLWxvZ28taGVhZDMuc3ZnIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjMuMiAoMDkxZTIwZWYwZiwgMjAyMy0xMS0yNSwgY3VzdG9tKSIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9Im5hbWVkdmlldzMiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjMDAwMDAwIgogICAgIGJvcmRlcm9wYWNpdHk9IjAuMjUiCiAgICAgaW5rc2NhcGU6c2hvd3BhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlY2hlY2tlcmJvYXJkPSIwIgogICAgIGlua3NjYXBlOmRlc2tjb2xvcj0iI2QxZDFkMSIKICAgICBpbmtzY2FwZTp6b29tPSIxMC43NjM4OCIKICAgICBpbmtzY2FwZTpjeD0iMzMuMjU5MzgxIgogICAgIGlua3NjYXBlOmN5PSIzOS4zOTA5OTkiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwNTIiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmczIiAvPgogIDxnCiAgICAgY2xpcC1wYXRoPSJ1cmwoI2EpIgogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmYiCiAgICAgZmlsbD0iI2ZmZiIKICAgICBpZD0iZzIiPgogICAgPHBhdGgKICAgICAgIGQ9Ik01Mi42MTIgNzguNzgySDIzLjMzYTIuNTU5IDIuNTU5IDAgMCAxLTIuNTYtMi41NTl2LTcuNjc2aC03Ljk3M2EyLjU2IDIuNTYgMCAwIDEtMi41Ni0yLjU2VjU1LjMxNWwtOC44Mi00LjM5N2EyLjU1OSAyLjU1OSAwIDAgMS0uOTg2LTMuNzFsOS44MDctMTQuNzE0di00LjM1QzEwLjI0IDEyLjU5OSAyMi44NDMgMCAzOC4zODggMCA1My45MzIgMCA2Ni41MzQgMTIuNiA2Ni41MzggMjguMTQzYy0uNjMyIDI3LjgyNC0xMC43NiAyMy41MTYtMTEuMTggMzQuMDQ1bC0uMTg3IDE0LjAzNWEyLjU5IDIuNTkgMCAwIDEtLjc1IDEuODEgMi41NSAyLjU1IDAgMCAxLTEuODA5Ljc1em0tMjYuNzIzLTUuMTE3aDI0LjE2NGwuMjg2LTE0LjU0MmMtLjI2My02LjY1NiAxMS43MTYtOC4yNDMgMTEuMDgtMzAuNzM0LS4zNTgtMTIuNzEzLTEwLjMxMy0yMy4yNzEtMjMuMDMxLTIzLjI3MS0xMi43MTggMC0yMy4wMjkgMTAuMzA3LTIzLjAzMiAyMy4wMjV2NS4xMThjMCAuNTA1LS4xNS45OTktLjQzIDEuNDJsLTguNjMgMTIuOTQgNy42NDUgMy44MmEyLjU1OSAyLjU1OSAwIDAgMSAxLjQxNSAyLjI5MXY5LjY5N2g3Ljk3NGEyLjU1OSAyLjU1OSAwIDAgMSAyLjU2IDIuNTU5eiIKICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmYiCiAgICAgICBpZD0icGF0aDEiIC8+CiAgICA8cGF0aAogICAgICAgZD0iTTQwLjM3MiA1OC4yMjJWMzguOTM0Yy4xMTggMCAuMjM3LjAxOC4zNTUuMDE4IDkuNzY5LS4wMTIgMTcuMDUtOS4wMTIgMTUuMDIyLTE4LjU2N2EyLjM2NiAyLjM2NiAwIDAgMC0xLjgyMS0xLjgyMmMtOC4xMDYtMS43My0xNi4xMjEgMy4yOTItMTguMDk4IDExLjM0MS0uMDI0LS4wMjQtLjA0My0uMDUtLjA2Ni0uMDczYTE1LjMyMyAxNS4zMjMgMCAwIDAtMTQuMDYtNC4xNyAyLjM2NSAyLjM2NSAwIDAgMC0xLjgyMSAxLjgyYy0yLjAyOCA5LjU1NSA1LjI1MiAxOC41NTQgMTUuMDIgMTguNTY4LjIzNiAwIC40OTItLjAyOC43MzgtLjA0djEyLjIxM1ptMi44MzktMzIuMTQzYTEwLjY0NiAxMC42NDYgMCAwIDEgOC4xMjQtMy4xMDZjLjM1IDYuMzQtNC44ODggMTEuNTc3LTExLjIyOCAxMS4yM2ExMC41OCAxMC41OCAwIDAgMSAzLjEwNC04LjEyNHpNMjcuNDAzIDM4LjE5M2ExMC42MDcgMTAuNjA3IDAgMCAxLTMuMTE4LTguMTIzYzYuMzQ0LS4zNTggMTEuNTg3IDQuODg2IDExLjIyOCAxMS4yMy0zLjAyMy4xNjktNS45NzMtLjk2MS04LjExLTMuMTA3eiIKICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmYiCiAgICAgICBpZD0icGF0aDIiIC8+CiAgPC9nPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMzIj4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImEiPgogICAgICA8cGF0aAogICAgICAgICBmaWxsPSIjZmZmIgogICAgICAgICBkPSJNMCAwaDI1NnY4MEgweiIKICAgICAgICAgaWQ9InBhdGgzIiAvPgogICAgPC9jbGlwUGF0aD4KICA8L2RlZnM+Cjwvc3ZnPgo=)](https://brainmade.org) +[![Claude Code](https://img.shields.io/badge/Claude%20Code-grey?logo=claude&logoColor=d97757)](https://claude.com/product/claude-code) [![GNU AGPLv3.0 License](https://img.shields.io/badge/License-GNU%20AGPLv3.0-dark_green?logo=gnu)](https://choosealicense.com/licenses/agpl-3.0) [![Buymeacoffee](https://img.shields.io/badge/Buymeacoffee-gray?logo=buymeacoffee)](https://buymeacoffee.com/nicolabelluti)
@@ -30,10 +30,10 @@ If you want to read about this reverse engineering attempt, check out ```rust use r701::R701; - + fn main() { let mut r701 = R701::connect("127.0.0.1:5005").unwrap(); - + println!("No\tMchn\tEnNo\t\tName\t\tMode\tIOMd\tDateTime\t"); r701.into_record_iter() .unwrap() @@ -46,7 +46,7 @@ If you want to read about this reverse engineering attempt, check out .get_name(record.employee_id) .unwrap() .unwrap_or(format!("user #{}", record.employee_id)); - + println!( "{:0>6}\t{}\t{:0>9}\t{: <10}\t{}\t{}\t{}", id + 1, diff --git a/src/r701.rs b/src/r701.rs index e344958..f212790 100644 --- a/src/r701.rs +++ b/src/r701.rs @@ -9,6 +9,7 @@ pub struct R701 { } impl R701 { + #[allow(clippy::missing_errors_doc)] pub fn connect(connection_info: impl ToSocketAddrs) -> Result { // Create a new R701 struct let mut new = Self { @@ -21,6 +22,7 @@ impl R701 { Ok(new) } + #[allow(clippy::missing_errors_doc)] pub fn request(&mut self, payload: &[u8; 12]) -> Result> { // Create a blank request let mut request = [0x55, 0xaa, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; @@ -40,6 +42,7 @@ impl R701 { Ok(buffer.fill_buf()?.to_vec()) } + #[allow(clippy::missing_errors_doc)] pub fn ping(&mut self) -> Result<()> { // Create a request with a payload of `01 80 00 00 00 00 00 00 00 00 00 // 00` and get the response @@ -54,6 +57,7 @@ impl R701 { Ok(()) } + #[allow(clippy::missing_errors_doc)] pub fn get_name(&mut self, id: u32) -> Result> { // Create a request with a payload of `01 c7 xx xx xx xx 00 00 00 00 14 // 00`, where `xx xx xx xx` is the employee ID in little endian @@ -89,6 +93,7 @@ impl R701 { Ok(Some(name).filter(|name| !name.is_empty())) } + #[allow(clippy::missing_errors_doc)] pub fn get_total_record_count(&mut self) -> Result { // Create a request with a payload of `01 b4 08 00 00 00 00 00 ff ff 00 // 00` and get the response @@ -109,6 +114,7 @@ impl R701 { Ok(u16::from_le_bytes(record_count_le)) } + #[allow(clippy::missing_errors_doc)] pub fn get_record_bytes( &mut self, total_records: u16, @@ -146,7 +152,8 @@ impl R701 { Ok(response[12..1036].to_vec()) } - pub fn into_record_iter(&mut self) -> Result { + #[allow(clippy::missing_errors_doc)] + pub fn into_record_iter(&mut self) -> Result> { RecordIterator::from(self) } } diff --git a/src/record_iterator.rs b/src/record_iterator.rs index 6399470..8f28439 100644 --- a/src/record_iterator.rs +++ b/src/record_iterator.rs @@ -11,6 +11,7 @@ pub struct RecordIterator<'a> { } impl<'a> RecordIterator<'a> { + #[allow(clippy::missing_errors_doc)] pub fn from(r701: &'a mut R701) -> Result { // Get the total number of records let total_records = r701.get_total_record_count()?; @@ -44,7 +45,7 @@ impl<'a> RecordIterator<'a> { } } -impl<'a> Iterator for RecordIterator<'a> { +impl Iterator for RecordIterator<'_> { type Item = Record; fn next(&mut self) -> Option {