some_or_print_with context
This commit is contained in:
parent
ba1214c219
commit
27c8697899
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -2256,7 +2256,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tesla-charge-controller"
|
name = "tesla-charge-controller"
|
||||||
version = "0.2.3"
|
version = "0.2.4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-channel",
|
"async-channel",
|
||||||
"chrono",
|
"chrono",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "tesla-charge-controller"
|
name = "tesla-charge-controller"
|
||||||
version = "0.2.3"
|
version = "0.2.4"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
license = "MITNFA"
|
license = "MITNFA"
|
||||||
description = "Controls Tesla charge rate based on solar charge data"
|
description = "Controls Tesla charge rate based on solar charge data"
|
||||||
|
|
|
@ -231,9 +231,15 @@ impl TeslaInterface {
|
||||||
// refresh our Tesla (the company's web servers, not the car) access token
|
// refresh our Tesla (the company's web servers, not the car) access token
|
||||||
if Instant::now().duration_since(self.last_refresh) >= KEY_REFRESH_INTERVAL {
|
if Instant::now().duration_since(self.last_refresh) >= KEY_REFRESH_INTERVAL {
|
||||||
log::warn!("refreshing keys...");
|
log::warn!("refreshing keys...");
|
||||||
if self.api.refresh().await.some_or_print().is_some() {
|
if self
|
||||||
|
.api
|
||||||
|
.refresh()
|
||||||
|
.await
|
||||||
|
.some_or_print_with("refreshing key")
|
||||||
|
.is_some()
|
||||||
|
{
|
||||||
let now = Instant::now();
|
let now = Instant::now();
|
||||||
if self.save_key().some_or_print().is_some() {
|
if self.save_key().some_or_print_with("saving key").is_some() {
|
||||||
self.last_refresh = now;
|
self.last_refresh = now;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -178,7 +178,7 @@ impl Pli {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn refresh(&mut self) {
|
pub fn refresh(&mut self) {
|
||||||
if let Some(new_state) = self.read_state().some_or_print() {
|
if let Some(new_state) = self.read_state().some_or_print_with("reading pl state") {
|
||||||
self.battery_voltage.set(new_state.battery_voltage);
|
self.battery_voltage.set(new_state.battery_voltage);
|
||||||
self.target_voltage.set(new_state.target_voltage);
|
self.target_voltage.set(new_state.target_voltage);
|
||||||
self.duty_cycle.set(new_state.duty_cycle);
|
self.duty_cycle.set(new_state.duty_cycle);
|
||||||
|
@ -196,7 +196,7 @@ impl Pli {
|
||||||
pub fn process_request(&mut self, message: PliRequest) {
|
pub fn process_request(&mut self, message: PliRequest) {
|
||||||
match message {
|
match message {
|
||||||
PliRequest::ReadRam(address) => {
|
PliRequest::ReadRam(address) => {
|
||||||
if let Some(data) = self.read_ram(address).some_or_print() {
|
if let Some(data) = self.read_ram(address).some_or_print_with("reading pl ram") {
|
||||||
let mut stdout =
|
let mut stdout =
|
||||||
termcolor::StandardStream::stdout(termcolor::ColorChoice::Always);
|
termcolor::StandardStream::stdout(termcolor::ColorChoice::Always);
|
||||||
let _ = stdout.set_color(
|
let _ = stdout.set_color(
|
||||||
|
|
|
@ -5,7 +5,8 @@ use thiserror::Error;
|
||||||
|
|
||||||
pub trait PrintErrors {
|
pub trait PrintErrors {
|
||||||
type Inner;
|
type Inner;
|
||||||
fn some_or_print(self) -> Option<Self::Inner>;
|
|
||||||
|
fn some_or_print_with(self, context: &str) -> Option<Self::Inner>;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T, E> PrintErrors for Result<T, E>
|
impl<T, E> PrintErrors for Result<T, E>
|
||||||
|
@ -14,11 +15,11 @@ where
|
||||||
{
|
{
|
||||||
type Inner = T;
|
type Inner = T;
|
||||||
|
|
||||||
fn some_or_print(self) -> Option<Self::Inner> {
|
fn some_or_print_with(self, context: &str) -> Option<Self::Inner> {
|
||||||
match self {
|
match self {
|
||||||
Ok(val) => Some(val),
|
Ok(val) => Some(val),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
log::error!("{e:?}");
|
log::error!("{context}: {e:?}");
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,10 @@ async fn main() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
Commands::Watch => {
|
Commands::Watch => {
|
||||||
if let Some(mut interface) = TeslaInterface::load(auth_path).await.some_or_print() {
|
if let Some(mut interface) = TeslaInterface::load(auth_path)
|
||||||
|
.await
|
||||||
|
.some_or_print_with("loading tesla interface")
|
||||||
|
{
|
||||||
let config = access_config();
|
let config = access_config();
|
||||||
// build the channel that takes messages from the webserver thread to the api thread
|
// build the channel that takes messages from the webserver thread to the api thread
|
||||||
let (api_requests, api_receiver) = async_channel::unbounded();
|
let (api_requests, api_receiver) = async_channel::unbounded();
|
||||||
|
|
Loading…
Reference in a new issue