diff --git a/Cargo.lock b/Cargo.lock index 04d9a37..d8ec42d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -157,6 +157,15 @@ dependencies = [ "futures-lite", ] +[[package]] +name = "async-oneshot" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec7c75bcbcb0139e9177f30692fd617405ca4e0c27802e128d53171f7042e2c" +dependencies = [ + "futures-micro", +] + [[package]] name = "async-process" version = "1.2.0" @@ -222,10 +231,10 @@ checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" [[package]] name = "bincode" -version = "2.0.0-dev" -source = "git+https://github.com/dequbed/bincode.git?branch=feature/in_place_buffer#bdea73bc3542257ef3b9788d4d54e53af236ed7a" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" dependencies = [ - "byteorder", "serde", ] @@ -425,7 +434,6 @@ dependencies = [ "libc", "num-integer", "num-traits", - "time", "winapi", ] @@ -488,16 +496,6 @@ dependencies = [ "libc", ] -[[package]] -name = "crossbeam-channel" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils", -] - [[package]] name = "crossbeam-utils" version = "0.8.5" @@ -557,6 +555,7 @@ dependencies = [ name = "diflouroborane" version = "0.3.0" dependencies = [ + "async-oneshot", "async-trait", "bincode", "capnp", @@ -565,7 +564,6 @@ dependencies = [ "capnpc", "clap", "erased-serde", - "futures 0.3.16", "futures-signals", "futures-test", "inventory", @@ -584,9 +582,6 @@ dependencies = [ "serde_dhall", "serde_json", "signal-hook", - "slog", - "slog-async", - "slog-term", "smol", "tempfile", "tracing", @@ -613,27 +608,6 @@ dependencies = [ "generic-array 0.14.4", ] -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if 1.0.0", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - [[package]] name = "discard" version = "1.0.4" @@ -776,7 +750,6 @@ dependencies = [ "futures-core", "futures-task", "futures-util", - "num_cpus", ] [[package]] @@ -830,6 +803,15 @@ dependencies = [ "syn", ] +[[package]] +name = "futures-micro" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b460264b3593d68b16a7bc35f7bc226ddfebdf9a1c8db1ed95d5cc6b7168c826" +dependencies = [ + "pin-project-lite", +] + [[package]] name = "futures-preview" version = "0.3.0-alpha.19" @@ -1536,16 +1518,6 @@ dependencies = [ "bitflags", ] -[[package]] -name = "redox_users" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" -dependencies = [ - "getrandom", - "redox_syscall", -] - [[package]] name = "regex" version = "1.5.4" @@ -1689,12 +1661,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" -[[package]] -name = "rustversion" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61b3909d758bb75c79f23d4736fac9433868679d3ad2ea7a61e3c25cfda9a088" - [[package]] name = "ryu" version = "1.0.5" @@ -1835,37 +1801,6 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590" -[[package]] -name = "slog" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8347046d4ebd943127157b94d63abb990fcf729dc4e9978927fdf4ac3c998d06" - -[[package]] -name = "slog-async" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "766c59b252e62a34651412870ff55d8c4e6d04df19b43eecb2703e417b097ffe" -dependencies = [ - "crossbeam-channel", - "slog", - "take_mut", - "thread_local", -] - -[[package]] -name = "slog-term" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95c1e7e5aab61ced6006149ea772770b84a0d16ce0f7885def313e4829946d76" -dependencies = [ - "atty", - "chrono", - "slog", - "term", - "thread_local", -] - [[package]] name = "smallvec" version = "1.7.0" @@ -1929,12 +1864,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "take_mut" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60" - [[package]] name = "tempfile" version = "3.2.0" @@ -1949,17 +1878,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "term" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" -dependencies = [ - "dirs-next", - "rustversion", - "winapi", -] - [[package]] name = "termcolor" version = "1.1.2" @@ -2007,16 +1925,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "time" -version = "0.1.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "tinyvec" version = "1.3.1" diff --git a/Cargo.toml b/Cargo.toml index 91f050f..ccc5e87 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,63 +16,57 @@ default = ["lmdb"] lmdb = [] [dependencies] -futures = { version = "0.3.16", features = ["thread-pool", "compat"] } -#futures-util = "0.3.16" -futures-signals = "0.3.22" - -smol = "1.2.5" - -tracing = "0.1.28" -tracing-subscriber = "0.2.25" +libc = "0.2.101" +lazy_static = "1.4.0" +uuid = { version = "0.8.2", features = ["serde", "v4"] } +async-trait = "0.1.51" +# Catch&Handle POSIX process signals signal-hook = "0.3.9" -slog = { version = "2.7.0", features = ["max_level_trace"] } -slog-term = "2.8.0" -slog-async = "2.7.0" - -capnp = "0.14.3" -capnpc = "0.14.4" -capnp-rpc = "0.14.1" -capnp-futures = "0.14.1" - -serde = { version = "1.0.130", features = ["derive"] } -erased-serde = "0.3" -#toml = "0.5.8" -#flexbuffers = "2.0.0" +# Argument parsing for bin/bffhd.rs +clap = "2.33.3" +# Internal Databases +lmdb-rkv = "0.14.0" rkyv = "0.7" ptr_meta = "0.1" rkyv_typename = "0.7" rkyv_dyn = "0.7" inventory = "0.1" +# Password hashing for internal users +rust-argon2 = "0.8.3" +rand = "0.8.4" + +# Async aware logging and tracing +tracing = "0.1.28" +tracing-subscriber = "0.2.25" + +# API +capnp = "0.14.3" +capnpc = "0.14.4" +capnp-rpc = "0.14.1" +capnp-futures = "0.14.1" + +# API Authentication +rsasl = "1.4.0" # TODO update this if bindgen breaks (again) +#rsasl = { path = "../../rsasl" } + +futures-signals = "0.3.22" +async-oneshot = "0.5" + +smol = "1.2.5" + +# Config and Database (De)Serialization +serde = { version = "1.0.130", features = ["derive"] } +erased-serde = "0.3" serde_dhall = { version = "0.10.1", default-features = false } serde_json = "1.0" -uuid = { version = "0.8.2", features = ["serde", "v4"] } - -clap = "2.33.3" - -# TODO update this if bindgen breaks (again) -rsasl = "1.4.0" -#rsasl = { path = "../../rsasl" } - -# rumqtt needs tokio which I'm trying to get away from +# Shelly support paho-mqtt = { git = "https://github.com/dequbed/paho.mqtt.rust.git", branch = "master", features = ["build_bindgen"] } -#mlua = { version = "0.4", features = ["async", "luajit"] } - -libc = "0.2.101" -lmdb-rkv = "0.14.0" - -async-trait = "0.1.51" - -lazy_static = "1.4.0" - -rust-argon2 = "0.8.3" -rand = "0.8.4" - [build-dependencies] capnpc = "0.14.4" # Used in build.rs to iterate over all files in schema/ @@ -81,7 +75,4 @@ walkdir = "2.3.2" [dev-dependencies] futures-test = "0.3.16" tempfile = "3.2" -bincode = "2.0.0-dev" - -[patch.crates-io] -bincode = { git = "https://github.com/dequbed/bincode.git", branch = "feature/in_place_buffer" } +bincode = "1.3" diff --git a/src/bin/bffhd.rs b/src/bin/bffhd.rs index 3398125..f480e4b 100644 --- a/src/bin/bffhd.rs +++ b/src/bin/bffhd.rs @@ -9,7 +9,8 @@ use diflouroborane::{config, error::Error}; use diflouroborane::db::{Databases, Dump}; use std::net::ToSocketAddrs; -fn main_res() -> Result<(), Error> { +fn main() -> Result<(), Error> { + tracing_subscriber::fmt::init(); // Argument parsing // values for the name, description and version are pulled from `Cargo.toml`. let matches = App::new(crate_name!()) @@ -151,20 +152,4 @@ fn main_res() -> Result<(), Error> { */ Ok(()) -} - -fn main() { - let retval; - // Scope to drop everything before exiting. - { - tracing_subscriber::fmt::init(); - match main_res() { - Ok(_) => retval = 0, - Err(e) => { - tracing::error!("{}", e); - retval = -1; - } - } - } - std::process::exit(retval); } \ No newline at end of file diff --git a/src/config.rs b/src/config.rs index e90cce6..533fb7a 100644 --- a/src/config.rs +++ b/src/config.rs @@ -4,13 +4,14 @@ use std::collections::HashMap; use serde::{Serialize, Deserialize, Deserializer, Serializer}; -use crate::error::Result; use std::fmt::Formatter; use std::net::{SocketAddr, IpAddr, ToSocketAddrs}; use std::str::FromStr; use crate::permissions::{PermRule, RoleIdentifier}; use serde::de::Error; +type Result = std::result::Result; + pub fn read(path: &Path) -> Result { serde_dhall::from_file(path) .parse() diff --git a/src/error.rs b/src/error.rs index 15eabd0..aa8512f 100644 --- a/src/error.rs +++ b/src/error.rs @@ -4,9 +4,6 @@ use serde_dhall; use rsasl::SaslError; -// SpawnError is a somewhat ambigous name, `use as` to make it futures::SpawnError instead. -use futures::task as futures_task; - use paho_mqtt::errors as mqtt; use crate::db::DBError; @@ -20,9 +17,7 @@ pub enum Error { Boxed(Box), Capnp(capnp::Error), DB(DBError), - FuturesSpawn(futures_task::SpawnError), MQTT(mqtt::Error), - BadVersion((u32,u32)), Denied, } @@ -47,15 +42,9 @@ impl fmt::Display for Error { Error::DB(e) => { write!(f, "DB Error: {:?}", e) }, - Error::FuturesSpawn(e) => { - write!(f, "Future could not be spawned: {}", e) - }, Error::MQTT(e) => { write!(f, "Paho MQTT encountered an error: {}", e) }, - Error::BadVersion((major,minor)) => { - write!(f, "Peer uses API version {}.{} which is incompatible!", major, minor) - } Error::Denied => { write!(f, "You do not have the permission required to do that.") } @@ -99,22 +88,10 @@ impl From for Error { } } -impl From for Error { - fn from(e: futures_task::SpawnError) -> Error { - Error::FuturesSpawn(e) - } -} - impl From for Error { fn from(e: mqtt::Error) -> Error { Error::MQTT(e) } } -/*impl From for Error { - fn from(e: network::Error) -> Error { - Error::EventNetwork(e) - } -}*/ - -pub(crate) type Result = std::result::Result; +pub(crate) type Result = std::result::Result; \ No newline at end of file diff --git a/src/resource.rs b/src/resource.rs index 8ebaf32..dcc50ba 100644 --- a/src/resource.rs +++ b/src/resource.rs @@ -1,7 +1,7 @@ use async_trait::async_trait; -use futures::channel::oneshot; use futures_signals::signal::Mutable; +use async_oneshot::{Sender }; use smol::channel::Receiver; @@ -47,7 +47,7 @@ pub trait Resource { pub struct Update { pub state: State, - pub errchan: oneshot::Sender, + pub errchan: Sender, } pub struct ResourceDriver { @@ -67,7 +67,7 @@ impl ResourceDriver { pub async fn drive_to_end(&mut self) { while let Ok(update) = self.rx.recv().await { let state = update.state; - let errchan = update.errchan; + let mut errchan = update.errchan; match self.res.update(&state).await { Ok(outstate) => {