Changed how TODO notes are marked to properly highlight in vim
This commit is contained in:
parent
1a9d12b1f3
commit
3613c2cbdf
|
@ -22,7 +22,7 @@ impl GoogleHome {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn handle_request(&self, request: Request, mut devices: &mut HashMap<&str, &mut dyn GoogleHomeDevice>) -> Result<Response, FullfillmentError> {
|
pub fn handle_request(&self, request: Request, mut devices: &mut HashMap<&str, &mut dyn GoogleHomeDevice>) -> Result<Response, FullfillmentError> {
|
||||||
// @TODO What do we do if we actually get more then one thing in the input array, right now
|
// TODO: What do we do if we actually get more then one thing in the input array, right now
|
||||||
// we only respond to the first thing
|
// we only respond to the first thing
|
||||||
let payload = request
|
let payload = request
|
||||||
.inputs
|
.inputs
|
||||||
|
@ -93,12 +93,12 @@ impl GoogleHome {
|
||||||
}
|
}
|
||||||
|
|
||||||
let results = command.execution.iter().map(|cmd| {
|
let results = command.execution.iter().map(|cmd| {
|
||||||
// @TODO We should also return the state after update in the state
|
// TODO: We should also return the state after update in the state
|
||||||
// struct, however that will make things WAY more complicated
|
// struct, however that will make things WAY more complicated
|
||||||
device.execute(cmd)
|
device.execute(cmd)
|
||||||
}).collect::<Result<Vec<_>, ErrorCode>>();
|
}).collect::<Result<Vec<_>, ErrorCode>>();
|
||||||
|
|
||||||
// @TODO We only get one error not all errors
|
// TODO: We only get one error not all errors
|
||||||
if let Err(err) = results {
|
if let Err(err) = results {
|
||||||
return (id, Err(err));
|
return (id, Err(err));
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -99,6 +99,6 @@ mod tests {
|
||||||
|
|
||||||
println!("{}", json);
|
println!("{}", json);
|
||||||
|
|
||||||
// @TODO Add a known correct output to test against
|
// TODO: Add a known correct output to test against
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,6 +87,6 @@ mod tests {
|
||||||
|
|
||||||
println!("{}", json);
|
println!("{}", json);
|
||||||
|
|
||||||
// @TODO Add a known correct output to test against
|
// TODO: Add a known correct output to test against
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ pub trait OnOff: std::fmt::Debug {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
// @TODO Implement correct error so we can handle them properly
|
// TODO: Implement correct error so we can handle them properly
|
||||||
fn is_on(&self) -> Result<bool, ErrorCode>;
|
fn is_on(&self) -> Result<bool, ErrorCode>;
|
||||||
fn set_on(&mut self, on: bool) -> Result<(), ErrorCode>;
|
fn set_on(&mut self, on: bool) -> Result<(), ErrorCode>;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ where
|
||||||
let openid = OpenIDConfig::from_ref(state);
|
let openid = OpenIDConfig::from_ref(state);
|
||||||
|
|
||||||
// Create a request to the auth server
|
// Create a request to the auth server
|
||||||
// @TODO Do some discovery to find the correct url for this instead of assuming
|
// TODO: Do some discovery to find the correct url for this instead of assuming
|
||||||
let mut req = reqwest::Client::new()
|
let mut req = reqwest::Client::new()
|
||||||
.get(format!("{}/userinfo", openid.base_url));
|
.get(format!("{}/userinfo", openid.base_url));
|
||||||
|
|
||||||
|
|
|
@ -132,7 +132,7 @@ pub struct KettleConfig {
|
||||||
pub struct PresenceDeviceConfig {
|
pub struct PresenceDeviceConfig {
|
||||||
#[serde(flatten)]
|
#[serde(flatten)]
|
||||||
pub mqtt: Option<MqttDeviceConfig>,
|
pub mqtt: Option<MqttDeviceConfig>,
|
||||||
// @TODO Maybe make this an option? That way if no timeout is set it will immediately turn the
|
// TODO: Maybe make this an option? That way if no timeout is set it will immediately turn the
|
||||||
// device off again?
|
// device off again?
|
||||||
pub timeout: u64 // Timeout in seconds
|
pub timeout: u64 // Timeout in seconds
|
||||||
}
|
}
|
||||||
|
@ -145,7 +145,7 @@ impl PresenceDeviceConfig {
|
||||||
return Err(MissingWildcard::new(&config.presence.topic).into());
|
return Err(MissingWildcard::new(&config.presence.topic).into());
|
||||||
}
|
}
|
||||||
|
|
||||||
// @TODO This is not perfect, if the topic is some/+/thing/# this will fail
|
// TODO: This is not perfect, if the topic is some/+/thing/# this will fail
|
||||||
let offset = config.presence.topic.find('+').or(config.presence.topic.find('#')).unwrap();
|
let offset = config.presence.topic.find('+').or(config.presence.topic.find('#')).unwrap();
|
||||||
let topic = format!("{}/{class}/{identifier}", &config.presence.topic[..offset-1]);
|
let topic = format!("{}/{class}/{identifier}", &config.presence.topic[..offset-1]);
|
||||||
trace!("Setting presence mqtt topic: {topic}");
|
trace!("Setting presence mqtt topic: {topic}");
|
||||||
|
|
|
@ -31,7 +31,7 @@ pub trait Device: AsGoogleHomeDevice + AsOnMqtt + AsOnPresence + AsOnDarkness +
|
||||||
fn get_id(&self) -> &str;
|
fn get_id(&self) -> &str;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @TODO Add an inner type that we can wrap with Arc<RwLock<>> to make this type a little bit nicer
|
// TODO: Add an inner type that we can wrap with Arc<RwLock<>> to make this type a little bit nicer
|
||||||
// to work with
|
// to work with
|
||||||
struct Devices {
|
struct Devices {
|
||||||
devices: HashMap<String, DeviceBox>,
|
devices: HashMap<String, DeviceBox>,
|
||||||
|
@ -84,7 +84,7 @@ pub enum DevicesError {
|
||||||
|
|
||||||
|
|
||||||
impl DevicesHandle {
|
impl DevicesHandle {
|
||||||
// @TODO Improve error type
|
// TODO: Improve error type
|
||||||
pub async fn fullfillment(&self, google_home: GoogleHome, payload: google_home::Request) -> Result<google_home::Response, DevicesError> {
|
pub async fn fullfillment(&self, google_home: GoogleHome, payload: google_home::Request) -> Result<google_home::Response, DevicesError> {
|
||||||
let (tx, rx) = oneshot::channel();
|
let (tx, rx) = oneshot::channel();
|
||||||
self.tx.send(Command::Fullfillment { google_home, payload, tx }).await?;
|
self.tx.send(Command::Fullfillment { google_home, payload, tx }).await?;
|
||||||
|
@ -105,7 +105,7 @@ pub fn start(mut mqtt_rx: mqtt::Receiver, mut presence_rx: presence::Receiver, m
|
||||||
let (tx, mut rx) = mpsc::channel(100);
|
let (tx, mut rx) = mpsc::channel(100);
|
||||||
|
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
// @TODO Handle error better
|
// TODO: Handle error better
|
||||||
loop {
|
loop {
|
||||||
tokio::select! {
|
tokio::select! {
|
||||||
Ok(message) = mqtt_rx.recv() => {
|
Ok(message) = mqtt_rx.recv() => {
|
||||||
|
@ -119,7 +119,7 @@ pub fn start(mut mqtt_rx: mqtt::Receiver, mut presence_rx: presence::Receiver, m
|
||||||
let darkness = *light_sensor_rx.borrow();
|
let darkness = *light_sensor_rx.borrow();
|
||||||
devices.on_darkness(darkness).await;
|
devices.on_darkness(darkness).await;
|
||||||
}
|
}
|
||||||
// @TODO Handle receiving None better, otherwise it might constantly run doing
|
// TODO: Handle receiving None better, otherwise it might constantly run doing
|
||||||
// nothing
|
// nothing
|
||||||
Some(cmd) = rx.recv() => devices.handle_cmd(cmd)
|
Some(cmd) = rx.recv() => devices.handle_cmd(cmd)
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ use crate::presence::OnPresence;
|
||||||
|
|
||||||
use super::{Device, DeviceBox, AsOnOff};
|
use super::{Device, DeviceBox, AsOnOff};
|
||||||
|
|
||||||
// @TODO Ideally we store am Arc to the childern devices,
|
// TODO: Ideally we store am Arc to the childern devices,
|
||||||
// that way they hook into everything just like all other devices
|
// that way they hook into everything just like all other devices
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct AudioSetup {
|
pub struct AudioSetup {
|
||||||
|
|
|
@ -28,7 +28,7 @@ pub struct IkeaOutlet {
|
||||||
|
|
||||||
impl IkeaOutlet {
|
impl IkeaOutlet {
|
||||||
pub async fn build(identifier: &str, info: InfoConfig, mqtt: MqttDeviceConfig, outlet_type: OutletType, timeout: Option<u64>, client: AsyncClient) -> Result<Self, DeviceError> {
|
pub async fn build(identifier: &str, info: InfoConfig, mqtt: MqttDeviceConfig, outlet_type: OutletType, timeout: Option<u64>, client: AsyncClient) -> Result<Self, DeviceError> {
|
||||||
// @TODO Handle potential errors here
|
// TODO: Handle potential errors here
|
||||||
client.subscribe(mqtt.topic.clone(), rumqttc::QoS::AtLeastOnce).await?;
|
client.subscribe(mqtt.topic.clone(), rumqttc::QoS::AtLeastOnce).await?;
|
||||||
|
|
||||||
Ok(Self{ identifier: identifier.to_owned(), info, mqtt, outlet_type, timeout, client, last_known_state: false, handle: None })
|
Ok(Self{ identifier: identifier.to_owned(), info, mqtt, outlet_type, timeout, client, last_known_state: false, handle: None })
|
||||||
|
@ -39,7 +39,7 @@ async fn set_on(client: AsyncClient, topic: &str, on: bool) {
|
||||||
let message = OnOffMessage::new(on);
|
let message = OnOffMessage::new(on);
|
||||||
|
|
||||||
let topic = format!("{}/set", topic);
|
let topic = format!("{}/set", topic);
|
||||||
// @TODO Handle potential errors here
|
// TODO: Handle potential errors here
|
||||||
client.publish(topic.clone(), rumqttc::QoS::AtLeastOnce, false, serde_json::to_string(&message).unwrap())
|
client.publish(topic.clone(), rumqttc::QoS::AtLeastOnce, false, serde_json::to_string(&message).unwrap())
|
||||||
.await
|
.await
|
||||||
.map_err(|err| warn!("Failed to update state on {topic}: {err}"))
|
.map_err(|err| warn!("Failed to update state on {topic}: {err}"))
|
||||||
|
@ -89,7 +89,7 @@ impl OnMqtt for IkeaOutlet {
|
||||||
};
|
};
|
||||||
|
|
||||||
// Turn the kettle of after the specified timeout
|
// Turn the kettle of after the specified timeout
|
||||||
// @TODO Impl Drop for IkeaOutlet that will abort the handle if the IkeaOutlet
|
// TODO: Impl Drop for IkeaOutlet that will abort the handle if the IkeaOutlet
|
||||||
// get dropped
|
// get dropped
|
||||||
let client = self.client.clone();
|
let client = self.client.clone();
|
||||||
let topic = self.mqtt.topic.clone();
|
let topic = self.mqtt.topic.clone();
|
||||||
|
@ -99,7 +99,7 @@ impl OnMqtt for IkeaOutlet {
|
||||||
debug!(id, "Starting timeout ({timeout:?}) for kettle...");
|
debug!(id, "Starting timeout ({timeout:?}) for kettle...");
|
||||||
tokio::time::sleep(timeout).await;
|
tokio::time::sleep(timeout).await;
|
||||||
debug!(id, "Turning kettle off!");
|
debug!(id, "Turning kettle off!");
|
||||||
// @TODO Idealy we would call self.set_on(false), however since we want to do
|
// TODO: Idealy we would call self.set_on(false), however since we want to do
|
||||||
// it after a timeout we have to put it in a seperate task.
|
// it after a timeout we have to put it in a seperate task.
|
||||||
// I don't think we can really get around calling outside function
|
// I don't think we can really get around calling outside function
|
||||||
set_on(client, &topic, false).await;
|
set_on(client, &topic, false).await;
|
||||||
|
@ -147,7 +147,7 @@ impl GoogleHomeDevice for IkeaOutlet {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn will_report_state(&self) -> bool {
|
fn will_report_state(&self) -> bool {
|
||||||
// @TODO Implement state reporting
|
// TODO: Implement state reporting
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -123,7 +123,7 @@ struct Response {
|
||||||
system: ResponseSystem,
|
system: ResponseSystem,
|
||||||
}
|
}
|
||||||
|
|
||||||
// @TODO Improve this error
|
// TODO: Improve this error
|
||||||
#[derive(Debug, Error)]
|
#[derive(Debug, Error)]
|
||||||
enum ResponseError {
|
enum ResponseError {
|
||||||
#[error("Expected a minimum data length of 4")]
|
#[error("Expected a minimum data length of 4")]
|
||||||
|
|
|
@ -21,7 +21,7 @@ pub struct WakeOnLAN {
|
||||||
|
|
||||||
impl WakeOnLAN {
|
impl WakeOnLAN {
|
||||||
pub async fn build(identifier: &str, info: InfoConfig, mqtt: MqttDeviceConfig, mac_address: MacAddress, broadcast_ip: Ipv4Addr, client: AsyncClient) -> Result<Self, DeviceError> {
|
pub async fn build(identifier: &str, info: InfoConfig, mqtt: MqttDeviceConfig, mac_address: MacAddress, broadcast_ip: Ipv4Addr, client: AsyncClient) -> Result<Self, DeviceError> {
|
||||||
// @TODO Handle potential errors here
|
// TODO: Handle potential errors here
|
||||||
client.subscribe(mqtt.topic.clone(), rumqttc::QoS::AtLeastOnce).await?;
|
client.subscribe(mqtt.topic.clone(), rumqttc::QoS::AtLeastOnce).await?;
|
||||||
|
|
||||||
Ok(Self { identifier: identifier.to_owned(), info, mqtt, mac_address, broadcast_ip })
|
Ok(Self { identifier: identifier.to_owned(), info, mqtt, mac_address, broadcast_ip })
|
||||||
|
|
|
@ -10,7 +10,7 @@ pub struct MissingEnv {
|
||||||
keys: Vec<String>
|
keys: Vec<String>
|
||||||
}
|
}
|
||||||
|
|
||||||
// @TODO Would be nice to somehow get the line number of the missing keys
|
// TODO: Would be nice to somehow get the line number of the missing keys
|
||||||
impl MissingEnv {
|
impl MissingEnv {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
Self { keys: Vec::new() }
|
Self { keys: Vec::new() }
|
||||||
|
@ -60,7 +60,7 @@ pub enum ConfigParseError {
|
||||||
DeserializeError(#[from] toml::de::Error)
|
DeserializeError(#[from] toml::de::Error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// @TODO Would be nice to somehow get the line number of the expected wildcard topic
|
// TODO: Would be nice to somehow get the line number of the expected wildcard topic
|
||||||
#[derive(Debug, Error)]
|
#[derive(Debug, Error)]
|
||||||
#[error("Topic '{topic}' is expected to be a wildcard topic")]
|
#[error("Topic '{topic}' is expected to be a wildcard topic")]
|
||||||
pub struct MissingWildcard {
|
pub struct MissingWildcard {
|
||||||
|
|
|
@ -3,7 +3,7 @@ use rumqttc::{matches, AsyncClient};
|
||||||
use tokio::sync::watch;
|
use tokio::sync::watch;
|
||||||
use tracing::{error, trace, debug};
|
use tracing::{error, trace, debug};
|
||||||
|
|
||||||
use crate::{config::{MqttDeviceConfig, LightSensorConfig}, mqtt::{self, OnMqtt, BrightnessMessage}, error::{LightSensorError}};
|
use crate::{config::{MqttDeviceConfig, LightSensorConfig}, mqtt::{self, OnMqtt, BrightnessMessage}, error::LightSensorError};
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
pub trait OnDarkness {
|
pub trait OnDarkness {
|
||||||
|
@ -36,7 +36,7 @@ pub async fn start(mut mqtt_rx: mqtt::Receiver, config: LightSensorConfig, clien
|
||||||
|
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
loop {
|
loop {
|
||||||
// @TODO Handle errors, warn if lagging
|
// TODO: Handle errors, warn if lagging
|
||||||
if let Ok(message) = mqtt_rx.recv().await {
|
if let Ok(message) = mqtt_rx.recv().await {
|
||||||
light_sensor.on_mqtt(&message).await;
|
light_sensor.on_mqtt(&message).await;
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,7 @@ pub async fn start(mqtt: MqttDeviceConfig, mut mqtt_rx: mqtt::Receiver, client:
|
||||||
|
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
loop {
|
loop {
|
||||||
// @TODO Handle errors, warn if lagging
|
// TODO: Handle errors, warn if lagging
|
||||||
if let Ok(message) = mqtt_rx.recv().await {
|
if let Ok(message) = mqtt_rx.recv().await {
|
||||||
presence.on_mqtt(&message).await;
|
presence.on_mqtt(&message).await;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user