This commit is contained in:
2025-11-10 18:23:58 -08:00
parent 644af22d0b
commit 6db60358ba
3 changed files with 26 additions and 70 deletions

71
Cargo.lock generated
View File

@@ -424,7 +424,6 @@ checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876"
dependencies = [
"futures-channel",
"futures-core",
"futures-executor",
"futures-io",
"futures-sink",
"futures-task",
@@ -447,17 +446,6 @@ version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
[[package]]
name = "futures-executor"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f"
dependencies = [
"futures-core",
"futures-task",
"futures-util",
]
[[package]]
name = "futures-io"
version = "0.3.31"
@@ -477,17 +465,6 @@ dependencies = [
"pin-project-lite",
]
[[package]]
name = "futures-macro"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "futures-sink"
version = "0.3.31"
@@ -506,16 +483,11 @@ version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
dependencies = [
"futures-channel",
"futures-core",
"futures-io",
"futures-macro",
"futures-sink",
"futures-task",
"memchr",
"pin-project-lite",
"pin-utils",
"slab",
]
[[package]]
@@ -607,9 +579,9 @@ dependencies = [
[[package]]
name = "js-sys"
version = "0.3.77"
version = "0.3.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65"
dependencies = [
"once_cell",
"wasm-bindgen",
@@ -927,35 +899,22 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
[[package]]
name = "wasm-bindgen"
version = "0.2.100"
version = "0.2.105"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60"
dependencies = [
"cfg-if",
"once_cell",
"rustversion",
"wasm-bindgen-macro",
]
[[package]]
name = "wasm-bindgen-backend"
version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
dependencies = [
"bumpalo",
"log",
"proc-macro2",
"quote",
"syn",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-futures"
version = "0.4.50"
version = "0.4.55"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61"
checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0"
dependencies = [
"cfg-if",
"js-sys",
@@ -966,9 +925,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.100"
version = "0.2.105"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -976,31 +935,31 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.100"
version = "0.2.105"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc"
dependencies = [
"bumpalo",
"proc-macro2",
"quote",
"syn",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.100"
version = "0.2.105"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76"
dependencies = [
"unicode-ident",
]
[[package]]
name = "web-sys"
version = "0.3.77"
version = "0.3.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2"
checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1"
dependencies = [
"js-sys",
"wasm-bindgen",

View File

@@ -7,7 +7,7 @@ edition = "2024"
backoff = { version = "0.4.0", features = ["async-std"] }
clap = { version = "4.5.51", features = ["derive"] }
env_logger = "0.11.8"
futures = "0.3.31"
futures = {version="0.3.31", default-features=false }
json = "0.12.4"
log = "0.4.28"
smol = "2.0.2"

View File

@@ -1,19 +1,16 @@
use std::future;
use std::time::Duration;
use backoff::SystemClock;
use backoff::exponential::ExponentialBackoff;
use clap::{Parser, value_parser};
use env_logger;
use clap::Parser;
use futures::future::{Either, select};
use futures::pin_mut;
use io::BufReader;
use json::{JsonValue, object};
use json::object;
use log::{debug, error, info};
use smol::channel::TrySendError;
use smol::io::AsyncReadExt;
use smol::net::{SocketAddr, TcpListener, TcpStream};
use smol::{Task, channel, io, prelude::*};
use smol::{channel, io, prelude::*};
type NMEAChanMsg = Vec<u8>;
@@ -77,12 +74,12 @@ enum GpsdResponse {
NMEAResponse(NMEAMsg),
}
impl<'a> TryFrom<&str> for GpsdResponse {
impl TryFrom<&str> for GpsdResponse {
type Error = Error;
fn try_from(value: &str) -> Result<Self, Self::Error> {
match value.as_bytes()[0] {
b'{' => Ok(GpsdResponse::JsonResponse(
json::parse(value).map_err(|e| Error::JsonParseError(e))?,
json::parse(value).map_err(Error::JsonParseError)?,
)),
b'$' => Ok(GpsdResponse::NMEAResponse(value.as_bytes().try_into()?)),
_ => Err(Error::UnknownGpsdResponse),
@@ -129,11 +126,11 @@ async fn gpsd_client_loop(
match msg {
GpsdResponse::JsonResponse(_) => continue,
GpsdResponse::NMEAResponse(mut n) => {
if let Some(msgs) = &msgs {
if !msgs.contains(&n.id) {
continue;
};
}
if let Some(msgs) = &msgs
&& !msgs.contains(&n.id)
{
continue;
};
if !chan.is_closed() {
n.msg.push(b'\r');
n.msg.push(b'\n');