diff --git a/Cargo.lock b/Cargo.lock index 95a0ea7c..18cf1b4d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -397,6 +397,41 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" +[[package]] +name = "example-client" +version = "1.4.0" +dependencies = [ + "rodbus", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "example-perf" +version = "1.4.0" +dependencies = [ + "clap", + "rodbus", + "tokio", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "example-server" +version = "1.4.0" +dependencies = [ + "rodbus", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", + "tracing-subscriber", +] + [[package]] name = "futures" version = "0.3.31" @@ -568,6 +603,14 @@ dependencies = [ "generic-array", ] +[[package]] +name = "integration" +version = "1.4.0" +dependencies = [ + "rodbus", + "tokio", +] + [[package]] name = "io-kit-sys" version = "0.4.1" @@ -942,7 +985,6 @@ dependencies = [ name = "rodbus" version = "1.4.0" dependencies = [ - "clap", "crc", "rx509", "scursor", @@ -952,11 +994,8 @@ dependencies = [ "tokio", "tokio-rustls", "tokio-serial", - "tokio-stream", "tokio-test", - "tokio-util", "tracing", - "tracing-subscriber", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index b5a26d10..58a69ebe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,13 @@ resolver = "2" members = [ "rodbus", "rodbus-client", + # example binaries + "examples/client", + "examples/server", + "examples/perf", + # integration tests + "integration", + # FFI crates "ffi/rodbus-bindings", "ffi/rodbus-ffi", "ffi/rodbus-ffi-java", @@ -14,9 +21,11 @@ members = [ oo-bindgen = "0.8.7" sfio-tokio-ffi = "0.9.0" sfio-tracing-ffi = "0.9.0" -tokio = "1.37.0" -tracing = "0.1.40" -tracing-subscriber = { version = "0.3.18" } +tokio = "1.37" +tokio-util = "0.7" +tokio-stream = "0.1" +tracing = "0.1" +tracing-subscriber = "0.3" [workspace.package] authors = ["Step Function I/O LLC >"] @@ -36,6 +45,7 @@ trivial_casts = "deny" missing_docs = "deny" unused = { level = "deny", priority = -1 } missing_copy_implementations = "deny" +unused_crate_dependencies = "deny" [profile.release] lto=true diff --git a/examples/client/Cargo.toml b/examples/client/Cargo.toml new file mode 100644 index 00000000..d5de2994 --- /dev/null +++ b/examples/client/Cargo.toml @@ -0,0 +1,29 @@ +[package] +name = "example-client" +version = "1.4.0" + +# inherit from workspace +authors.workspace = true +rust-version.workspace = true +edition.workspace = true +license-file.workspace = true +homepage.workspace = true +repository.workspace = true +keywords.workspace = true +categories.workspace = true + +[lints] +workspace = true + +[dependencies] +rodbus = { path = "../../rodbus", features = ["tls", "serial"] } +tokio = { workspace = true, features = ["net", "sync", "io-util", "io-std", "time", "rt", "rt-multi-thread", "macros"] } +tokio-stream = { workspace = true } +tokio-util = { workspace = true } +tracing = { workspace = true } +tracing-subscriber = { workspace = true } + +[features] +default = ["tls", "serial"] +tls = [] +serial = [] diff --git a/rodbus/examples/client.rs b/examples/client/src/main.rs similarity index 100% rename from rodbus/examples/client.rs rename to examples/client/src/main.rs diff --git a/examples/perf/Cargo.toml b/examples/perf/Cargo.toml new file mode 100644 index 00000000..0741a8d3 --- /dev/null +++ b/examples/perf/Cargo.toml @@ -0,0 +1,28 @@ +[package] +name = "example-perf" +version = "1.4.0" + +# inherit from workspace +authors.workspace = true +rust-version.workspace = true +edition.workspace = true +license-file.workspace = true +homepage.workspace = true +repository.workspace = true +keywords.workspace = true +categories.workspace = true + +[lints] +workspace = true + +[dependencies] +rodbus = { path = "../../rodbus", features = ["tls", "serial"] } +clap = { version = "4.1.8", features = ["derive"] } +tokio = { workspace = true, features = ["net", "sync", "io-util", "io-std", "time", "rt", "rt-multi-thread", "macros"] } +tracing = { workspace = true } +tracing-subscriber = { workspace = true } + +[features] +default = ["tls", "serial"] +tls = [] +serial = [] diff --git a/rodbus/examples/perf.rs b/examples/perf/src/main.rs similarity index 100% rename from rodbus/examples/perf.rs rename to examples/perf/src/main.rs diff --git a/examples/server/Cargo.toml b/examples/server/Cargo.toml new file mode 100644 index 00000000..4438bece --- /dev/null +++ b/examples/server/Cargo.toml @@ -0,0 +1,29 @@ +[package] +name = "example-server" +version = "1.4.0" + +# inherit from workspace +authors.workspace = true +rust-version.workspace = true +edition.workspace = true +license-file.workspace = true +homepage.workspace = true +repository.workspace = true +keywords.workspace = true +categories.workspace = true + +[lints] +workspace = true + +[dependencies] +rodbus = { path = "../../rodbus", features = ["tls", "serial"] } +tokio = { workspace = true, features = ["net", "sync", "io-util", "io-std", "time", "rt", "rt-multi-thread", "macros"] } +tokio-stream = { workspace = true } +tokio-util = { workspace = true, features = ["codec"] } +tracing = { workspace = true } +tracing-subscriber = { workspace = true } + +[features] +default = ["tls", "serial"] +tls = [] +serial = [] diff --git a/rodbus/examples/server.rs b/examples/server/src/main.rs similarity index 100% rename from rodbus/examples/server.rs rename to examples/server/src/main.rs diff --git a/ffi/rodbus-ffi/src/iterator.rs b/ffi/rodbus-ffi/src/iterator.rs index daf0f697..4a406336 100644 --- a/ffi/rodbus-ffi/src/iterator.rs +++ b/ffi/rodbus-ffi/src/iterator.rs @@ -30,7 +30,7 @@ impl<'a> RegisterValueIterator<'a> { } pub(crate) unsafe fn bit_value_iterator_next( - it: *mut crate::BitValueIterator, + it: *mut crate::BitValueIterator<'_>, ) -> Option<&crate::ffi::BitValue> { match it.as_mut() { Some(it) => match it.inner.next() { @@ -46,7 +46,7 @@ pub(crate) unsafe fn bit_value_iterator_next( } pub(crate) unsafe fn register_value_iterator_next( - it: *mut crate::RegisterValueIterator, + it: *mut crate::RegisterValueIterator<'_>, ) -> Option<&crate::ffi::RegisterValue> { match it.as_mut() { Some(it) => match it.inner.next() { diff --git a/guide/docs/api/client/requests.mdx b/guide/docs/api/client/requests.mdx index 7ed0e5cf..18094c9d 100644 --- a/guide/docs/api/client/requests.mdx +++ b/guide/docs/api/client/requests.mdx @@ -58,9 +58,9 @@ values={[ ```rust -{{#include ../rodbus/examples/client.rs:request_param}} +{{#include ../examples/client/src/main.rs:request_param}} -{{#include ../rodbus/examples/client.rs:read_coils}} +{{#include ../examples/client/src/main.rs:read_coils}} ``` @@ -149,9 +149,9 @@ values={[ ```rust -{{#include ../rodbus/examples/client.rs:request_param}} +{{#include ../examples/client/src/main.rs:request_param}} -{{#include ../rodbus/examples/client.rs:write_single_coil}} +{{#include ../examples/client/src/main.rs:write_single_coil}} ``` @@ -211,9 +211,9 @@ values={[ ```rust -{{#include ../rodbus/examples/client.rs:request_param}} +{{#include ../examples/client/src/main.rs:request_param}} -{{#include ../rodbus/examples/client.rs:write_multiple_registers}} +{{#include ../examples/client/src/main.rs:write_multiple_registers}} ``` diff --git a/guide/docs/api/client/rtu_client.mdx b/guide/docs/api/client/rtu_client.mdx index 98acebca..81ec15a1 100644 --- a/guide/docs/api/client/rtu_client.mdx +++ b/guide/docs/api/client/rtu_client.mdx @@ -33,7 +33,7 @@ values={[ ```rust -{{#include ../rodbus/examples/client.rs:create_rtu_channel}} +{{#include ../examples/client/src/main.rs:create_rtu_channel}} ``` diff --git a/guide/docs/api/client/tcp_client.mdx b/guide/docs/api/client/tcp_client.mdx index 106cb583..869a93b4 100644 --- a/guide/docs/api/client/tcp_client.mdx +++ b/guide/docs/api/client/tcp_client.mdx @@ -29,7 +29,7 @@ values={[ ```rust -{{#include ../rodbus/examples/client.rs:create_tcp_channel}} +{{#include ../examples/client/src/main.rs:create_tcp_channel}} ``` diff --git a/guide/docs/api/client/tls_client.mdx b/guide/docs/api/client/tls_client.mdx index 72625b86..76691ae7 100644 --- a/guide/docs/api/client/tls_client.mdx +++ b/guide/docs/api/client/tls_client.mdx @@ -29,9 +29,9 @@ values={[ ```rust -{{#include ../rodbus/examples/client.rs:tls_ca_chain_config}} +{{#include ../examples/client/src/main.rs:tls_ca_chain_config}} -{{#include ../rodbus/examples/client.rs:create_tls_channel}} +{{#include ../examples/client/src/main.rs:create_tls_channel}} ``` @@ -89,9 +89,9 @@ values={[ ```rust -{{#include ../rodbus/examples/client.rs:tls_self_signed_config}} +{{#include ../examples/client/src/main.rs:tls_self_signed_config}} -{{#include ../rodbus/examples/client.rs:create_tls_channel}} +{{#include ../examples/client/src/main.rs:create_tls_channel}} ``` diff --git a/guide/docs/api/logging.mdx b/guide/docs/api/logging.mdx index 04f7b037..0c84b719 100644 --- a/guide/docs/api/logging.mdx +++ b/guide/docs/api/logging.mdx @@ -38,7 +38,7 @@ values={[ ```rust -{{#include ../rodbus/examples/client.rs:logging}} +{{#include ../examples/client/src/main.rs:logging}} ``` @@ -126,4 +126,3 @@ Protocol decoding is always output at the *Info* log level. If left enabled, it try adjusting the application-layer decoding first to gain visibility into the messages being exchanged on one channel at a time. ::: - diff --git a/guide/docs/api/runtime.mdx b/guide/docs/api/runtime.mdx index 4366b389..bd26dbad 100644 --- a/guide/docs/api/runtime.mdx +++ b/guide/docs/api/runtime.mdx @@ -39,7 +39,7 @@ values={[ ```rust -{{#include ../rodbus/examples/client.rs:runtime_init}} +{{#include ../examples/client/src/main.rs:runtime_init}} // do things within the context of the runtime // it is automatically shut down when this async fn returns } diff --git a/guide/docs/api/server/rtu_server.mdx b/guide/docs/api/server/rtu_server.mdx index 73744a16..dca9c718 100644 --- a/guide/docs/api/server/rtu_server.mdx +++ b/guide/docs/api/server/rtu_server.mdx @@ -65,9 +65,9 @@ values={[ ```rust -{{#include ../rodbus/examples/server.rs:handler_map_create}} +{{#include ../examples/server/src/main.rs:handler_map_create}} -{{#include ../rodbus/examples/server.rs:rtu_server_create}} +{{#include ../examples/server/src/main.rs:rtu_server_create}} ``` diff --git a/guide/docs/api/server/tcp_server.mdx b/guide/docs/api/server/tcp_server.mdx index e43922f2..787ee2da 100644 --- a/guide/docs/api/server/tcp_server.mdx +++ b/guide/docs/api/server/tcp_server.mdx @@ -54,9 +54,9 @@ values={[ ```rust -{{#include ../rodbus/examples/server.rs:handler_map_create}} +{{#include ../examples/server/src/main.rs:handler_map_create}} -{{#include ../rodbus/examples/server.rs:tcp_server_create}} +{{#include ../examples/server/src/main.rs:tcp_server_create}} ``` diff --git a/guide/docs/api/server/tls_server.mdx b/guide/docs/api/server/tls_server.mdx index 8f27d105..0f19f0e0 100644 --- a/guide/docs/api/server/tls_server.mdx +++ b/guide/docs/api/server/tls_server.mdx @@ -36,11 +36,11 @@ values={[ ```rust -{{#include ../rodbus/examples/server.rs:handler_map_create}} +{{#include ../examples/server/src/main.rs:handler_map_create}} -{{#include ../rodbus/examples/server.rs:tls_ca_chain_config}} +{{#include ../examples/server/src/main.rs:tls_ca_chain_config}} -{{#include ../rodbus/examples/server.rs:tls_server_create}} +{{#include ../examples/server/src/main.rs:tls_server_create}} ``` @@ -112,11 +112,11 @@ values={[ ```rust -{{#include ../rodbus/examples/server.rs:handler_map_create}} +{{#include ../examples/server/src/main.rs:handler_map_create}} -{{#include ../rodbus/examples/server.rs:tls_self_signed_config}} +{{#include ../examples/server/src/main.rs:tls_self_signed_config}} -{{#include ../rodbus/examples/server.rs:tls_server_create}} +{{#include ../examples/server/src/main.rs:tls_server_create}} ``` diff --git a/guide/docs/api/server/write_handler.mdx b/guide/docs/api/server/write_handler.mdx index 80272508..f891ef48 100644 --- a/guide/docs/api/server/write_handler.mdx +++ b/guide/docs/api/server/write_handler.mdx @@ -50,7 +50,7 @@ values={[ ```rust -{{#include ../rodbus/examples/server.rs:request_handler}} +{{#include ../examples/server/src/main.rs:request_handler}} ``` diff --git a/guide/docs/examples/summary.mdx b/guide/docs/examples/summary.mdx index 7e5c6025..3c2810a5 100644 --- a/guide/docs/examples/summary.mdx +++ b/guide/docs/examples/summary.mdx @@ -25,7 +25,7 @@ We pull these code blocks from the example programs when we generate this guide. The following links redirect to language-specific examples for the current version on Github: -* Rust +* Rust * C and C++ * C# * Java diff --git a/integration/Cargo.toml b/integration/Cargo.toml new file mode 100644 index 00000000..63b6a3f0 --- /dev/null +++ b/integration/Cargo.toml @@ -0,0 +1,28 @@ +[package] +name = "integration" +version = "1.4.0" +autobins = false +autotests = false +autobenches = false +autoexamples = false + +# inherit from workspace +authors.workspace = true +rust-version.workspace = true +edition.workspace = true +license-file.workspace = true +homepage.workspace = true +repository.workspace = true +keywords.workspace = true +categories.workspace = true + +[lints] +workspace = true + +[[test]] +name = "integration_test" +path = "tests/integration_test.rs" + +[dependencies] +rodbus = { path = "../rodbus" } +tokio = { workspace = true, features = ["net", "sync", "io-util", "io-std", "time", "rt", "rt-multi-thread", "macros"] } diff --git a/rodbus/tests/integration_test.rs b/integration/tests/integration_test.rs similarity index 100% rename from rodbus/tests/integration_test.rs rename to integration/tests/integration_test.rs diff --git a/rodbus/Cargo.toml b/rodbus/Cargo.toml index 20c046d1..085d0e93 100644 --- a/rodbus/Cargo.toml +++ b/rodbus/Cargo.toml @@ -18,13 +18,13 @@ categories.workspace = true workspace = true [dependencies] -crc = "3.0" +crc = "3" scursor = "0.2.0" tokio = { workspace = true, features = ["net", "sync", "io-util", "io-std", "time", "rt", "rt-multi-thread", "macros"] } tracing = { workspace = true } # TLS dependencies -rx509 = { version = "^0.2", optional = true } +rx509 = { version = "0.2", optional = true } sfio-rustls-config = { version = "0.3.2", optional = true } tokio-rustls = { version = "0.26.0", features = ["tls12"], default-features = false, optional = true } @@ -32,15 +32,11 @@ tokio-rustls = { version = "0.26.0", features = ["tls12"], default-features = fa tokio-serial = { version = "5.4", default-features = false, optional = true } # serialize dependencies -serde = { version = "1.0.2", default-features = false, features = ["derive"], optional = true} +serde = { version = "1.0", default-features = false, features = ["derive"], optional = true} [dev-dependencies] -clap = { version = "4.1.8", features = ["derive"] } -tokio-stream = "0.1" -tokio-util = { version = "0.7", features = ["codec"] } -tokio-test = "0.4.2" +tokio-test = "0.4" sfio-tokio-mock-io = "0.2" -tracing-subscriber = { workspace = true } [features] default = ["tls", "serial"] diff --git a/rodbus/src/types.rs b/rodbus/src/types.rs index e35a2489..42a39191 100644 --- a/rodbus/src/types.rs +++ b/rodbus/src/types.rs @@ -383,7 +383,7 @@ mod tests { #[test] fn address_start_max_count_of_one_is_allowed() { - AddressRange::try_from(std::u16::MAX, 1).unwrap(); + AddressRange::try_from(u16::MAX, 1).unwrap(); } #[test]