From 9727d35116045060accedf9c8e0c6a21807de4c6 Mon Sep 17 00:00:00 2001 From: Savanni D'Gerinel Date: Wed, 7 Feb 2024 23:36:03 -0500 Subject: [PATCH 1/2] Resolve clippy warnings Warnings were mounting up. It was time to resolve them before attempting a massive rebase. --- fitnesstrax/app/src/app.rs | 2 +- fitnesstrax/app/src/app_window.rs | 7 ++-- fitnesstrax/app/src/components/day.rs | 1 + fitnesstrax/app/src/components/text_entry.rs | 3 ++ fitnesstrax/app/src/components/weight.rs | 1 - fitnesstrax/app/src/types.rs | 10 +++++ fitnesstrax/app/src/view_models/day_detail.rs | 40 +++++++++---------- fitnesstrax/app/src/views/historical_view.rs | 8 ++-- fitnesstrax/app/src/views/mod.rs | 1 + 9 files changed, 44 insertions(+), 29 deletions(-) diff --git a/fitnesstrax/app/src/app.rs b/fitnesstrax/app/src/app.rs index 18b67ea..2aafc94 100644 --- a/fitnesstrax/app/src/app.rs +++ b/fitnesstrax/app/src/app.rs @@ -157,7 +157,7 @@ impl RecordProvider for App { .map_err(|_| WriteError::Unhandled) } - async fn delete_record(&self, id: RecordId) -> Result<(), WriteError> { + async fn delete_record(&self, _id: RecordId) -> Result<(), WriteError> { unimplemented!() } } diff --git a/fitnesstrax/app/src/app_window.rs b/fitnesstrax/app/src/app_window.rs index 2359f62..24f0484 100644 --- a/fitnesstrax/app/src/app_window.rs +++ b/fitnesstrax/app/src/app_window.rs @@ -15,15 +15,14 @@ You should have received a copy of the GNU General Public License along with Fit */ use crate::{ - app::{App, RecordProvider}, + app::App, types::DayInterval, view_models::DayDetailViewModel, views::{DayDetailView, HistoricalView, PlaceholderView, View, WelcomeView}, }; use adw::prelude::*; use chrono::{Duration, Local}; -use emseries::Record; -use ft_core::TraxRecord; + use gio::resources_lookup_data; use gtk::STYLE_PROVIDER_PRIORITY_USER; use std::{cell::RefCell, path::PathBuf, rc::Rc}; @@ -126,6 +125,7 @@ impl AppWindow { s } + #[allow(unused)] fn show_welcome_view(&self) { let view = View::Welcome(WelcomeView::new({ let s = self.clone(); @@ -178,6 +178,7 @@ impl AppWindow { self.layout.append(¤t_widget.widget()); } + #[allow(unused)] fn on_apply_config(&self, path: PathBuf) { glib::spawn_future_local({ let s = self.clone(); diff --git a/fitnesstrax/app/src/components/day.rs b/fitnesstrax/app/src/components/day.rs index db0edf3..0b8791f 100644 --- a/fitnesstrax/app/src/components/day.rs +++ b/fitnesstrax/app/src/components/day.rs @@ -223,6 +223,7 @@ impl DayDetail { pub struct DayEditPrivate { on_finished: RefCell>, + #[allow(unused)] workout_rows: RefCell, view_model: RefCell>, } diff --git a/fitnesstrax/app/src/components/text_entry.rs b/fitnesstrax/app/src/components/text_entry.rs index ff8c206..9cf0542 100644 --- a/fitnesstrax/app/src/components/text_entry.rs +++ b/fitnesstrax/app/src/components/text_entry.rs @@ -106,6 +106,7 @@ impl TextEntry { } } +#[allow(unused)] pub fn time_field( value: Option, on_update: OnUpdate, @@ -122,6 +123,7 @@ where ) } +#[allow(unused)] pub fn distance_field( value: Option, on_update: OnUpdate, @@ -138,6 +140,7 @@ where ) } +#[allow(unused)] pub fn duration_field( value: Option, on_update: OnUpdate, diff --git a/fitnesstrax/app/src/components/weight.rs b/fitnesstrax/app/src/components/weight.rs index 23ab48f..615f3f2 100644 --- a/fitnesstrax/app/src/components/weight.rs +++ b/fitnesstrax/app/src/components/weight.rs @@ -15,7 +15,6 @@ You should have received a copy of the GNU General Public License along with Fit */ use crate::{ - components::TextEntry, types::{FormatOption, WeightFormatter}, }; use gtk::prelude::*; diff --git a/fitnesstrax/app/src/types.rs b/fitnesstrax/app/src/types.rs index 5172add..a0614c3 100644 --- a/fitnesstrax/app/src/types.rs +++ b/fitnesstrax/app/src/types.rs @@ -53,6 +53,7 @@ impl Iterator for DayIterator { #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum FormatOption { Abbreviated, + #[allow(unused)] Full, } @@ -60,6 +61,7 @@ pub enum FormatOption { pub struct TimeFormatter(chrono::NaiveTime); impl TimeFormatter { + #[allow(unused)] pub fn format(&self, option: FormatOption) -> String { match option { FormatOption::Abbreviated => self.0.format("%H:%M"), @@ -68,6 +70,7 @@ impl TimeFormatter { .to_string() } + #[allow(unused)] pub fn parse(s: &str) -> Result { let parts = s .split(':') @@ -104,6 +107,7 @@ impl From for TimeFormatter { pub struct WeightFormatter(si::Kilogram); impl WeightFormatter { + #[allow(unused)] pub fn format(&self, option: FormatOption) -> String { match option { FormatOption::Abbreviated => format!("{} kg", self.0.value_unsafe), @@ -111,6 +115,7 @@ impl WeightFormatter { } } + #[allow(unused)] pub fn parse(s: &str) -> Result { s.parse::() .map(|w| WeightFormatter(w * si::KG)) @@ -149,6 +154,7 @@ impl From> for WeightFormatter { pub struct DistanceFormatter(si::Meter); impl DistanceFormatter { + #[allow(unused)] pub fn format(&self, option: FormatOption) -> String { match option { FormatOption::Abbreviated => format!("{} km", self.0.value_unsafe / 1000.), @@ -156,6 +162,7 @@ impl DistanceFormatter { } } + #[allow(unused)] pub fn parse(s: &str) -> Result { let value = s.parse::().map_err(|_| ParseError)?; Ok(DistanceFormatter(value * 1000. * si::M)) @@ -193,6 +200,7 @@ impl From> for DistanceFormatter { pub struct DurationFormatter(si::Second); impl DurationFormatter { + #[allow(unused)] pub fn format(&self, option: FormatOption) -> String { let (hours, minutes) = self.hours_and_minutes(); let (h, m) = match option { @@ -206,11 +214,13 @@ impl DurationFormatter { } } + #[allow(unused)] pub fn parse(s: &str) -> Result { let value = s.parse::().map_err(|_| ParseError)?; Ok(DurationFormatter(value * 60. * si::S)) } + #[allow(unused)] fn hours_and_minutes(&self) -> (i64, i64) { let minutes: i64 = (self.0.value_unsafe / 60.).round() as i64; let hours: i64 = minutes / 60; diff --git a/fitnesstrax/app/src/view_models/day_detail.rs b/fitnesstrax/app/src/view_models/day_detail.rs index 07a70cb..03d37ee 100644 --- a/fitnesstrax/app/src/view_models/day_detail.rs +++ b/fitnesstrax/app/src/view_models/day_detail.rs @@ -14,11 +14,13 @@ General Public License for more details. You should have received a copy of the GNU General Public License along with FitnessTrax. If not, see . */ +#[allow(unused_imports)] use crate::app::{ReadError, RecordProvider, WriteError}; +#[allow(unused_imports)] use chrono::NaiveDate; use dimensioned::si; use emseries::{Record, RecordId, Recordable}; -use ft_core::{RecordType, TimeDistance, TimeDistanceWorkoutType, TraxRecord}; +use ft_core::{TimeDistance, TimeDistanceWorkoutType, TraxRecord}; use std::{ collections::HashMap, ops::Deref, @@ -46,10 +48,10 @@ impl RecordState { fn exists(&self) -> bool { match self { - RecordState::Original(ref r) => true, - RecordState::New(ref r) => true, - RecordState::Updated(ref r) => true, - RecordState::Deleted(ref r) => false, + RecordState::Original(ref _r) => true, + RecordState::New(ref _r) => true, + RecordState::Updated(ref _r) => true, + RecordState::Deleted(ref _r) => false, } } @@ -158,7 +160,7 @@ impl DayDetailViewModel { } pub fn weight(&self) -> Option> { - (*self.weight.read().unwrap()).as_ref().map(|w| (*w).weight) + (*self.weight.read().unwrap()).as_ref().map(|w| w.weight) } pub fn set_weight(&self, new_weight: si::Kilogram) { @@ -220,7 +222,7 @@ impl DayDetailViewModel { let data = workout.data.clone(); let mut record_set = self.records.write().unwrap(); - if let Some(record_state) = record_set.get(&id).clone() { + if let Some(record_state) = record_set.get(&id) { let updated_state = match **record_state { TraxRecord::BikeRide(_) => { Some(record_state.clone().with_value(TraxRecord::BikeRide(data))) @@ -281,15 +283,13 @@ impl DayDetailViewModel { ) } + #[allow(unused)] fn get_record(&self, id: &RecordId) -> Option> { let record_set = self.records.read().unwrap(); - match record_set.get(&id) { - Some(record) => Some(Record { - id: id.clone(), - data: (**record).clone(), - }), - None => None, - } + record_set.get(id).map(|record| Record { + id: id.clone(), + data: (**record).clone(), + }) } pub fn remove_record(&self, id: RecordId) { @@ -486,28 +486,28 @@ mod test { Record { id: RecordId::default(), data: TraxRecord::Weight(ft_core::Weight { - date: oct_12.clone(), + date: oct_12, weight: 93. * si::KG, }), }, Record { id: RecordId::default(), data: TraxRecord::Weight(ft_core::Weight { - date: oct_13.clone(), + date: oct_13, weight: 95. * si::KG, }), }, Record { id: RecordId::default(), data: TraxRecord::Steps(ft_core::Steps { - date: oct_13.clone(), + date: oct_13, count: 2500, }), }, Record { id: RecordId::default(), data: TraxRecord::BikeRide(ft_core::TimeDistance { - datetime: oct_13_am.clone(), + datetime: oct_13_am, distance: Some(15000. * si::M), duration: Some(3600. * si::S), comments: Some("somecomments present".to_owned()), @@ -522,7 +522,7 @@ mod test { #[tokio::test] async fn it_honors_only_the_first_weight_and_step_record() { - let (view_model, provider) = create_view_model().await; + let (view_model, _provider) = create_view_model().await; assert_eq!(view_model.weight(), Some(95. * si::KG)); assert_eq!(view_model.steps(), Some(2500)); } @@ -647,7 +647,7 @@ mod test { #[tokio::test] async fn it_can_delete_an_existing_record() { let (view_model, provider) = create_view_model().await; - let mut workout = view_model + let workout = view_model .time_distance_records(TimeDistanceWorkoutType::BikeRide) .first() .cloned() diff --git a/fitnesstrax/app/src/views/historical_view.rs b/fitnesstrax/app/src/views/historical_view.rs index cd7c782..acbf44b 100644 --- a/fitnesstrax/app/src/views/historical_view.rs +++ b/fitnesstrax/app/src/views/historical_view.rs @@ -17,12 +17,12 @@ You should have received a copy of the GNU General Public License along with Fit use crate::{ app::App, components::DaySummary, types::DayInterval, view_models::DayDetailViewModel, }; -use chrono::NaiveDate; -use emseries::Record; -use ft_core::TraxRecord; + + + use glib::Object; use gtk::{prelude::*, subclass::prelude::*}; -use std::{cell::RefCell, collections::HashMap, rc::Rc}; +use std::{cell::RefCell, rc::Rc}; /// The historical view will show a window into the main database. It will show some version of /// daily summaries, daily details, and will provide all functions the user may need for editing diff --git a/fitnesstrax/app/src/views/mod.rs b/fitnesstrax/app/src/views/mod.rs index 9957823..a8c7360 100644 --- a/fitnesstrax/app/src/views/mod.rs +++ b/fitnesstrax/app/src/views/mod.rs @@ -30,6 +30,7 @@ pub use welcome_view::WelcomeView; pub enum View { Placeholder(PlaceholderView), + #[allow(unused)] Welcome(WelcomeView), Historical(HistoricalView), } -- 2.44.1 From a7d43ef184050ca20cd4df03e202b3f7043d06b2 Mon Sep 17 00:00:00 2001 From: Savanni D'Gerinel Date: Thu, 8 Feb 2024 00:16:27 -0500 Subject: [PATCH 2/2] Update Cargo.nix --- Cargo.nix | 70 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 50 insertions(+), 20 deletions(-) diff --git a/Cargo.nix b/Cargo.nix index 80c4af3..953acc3 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -655,6 +655,32 @@ rec { }; resolvedDefaultFeatures = [ "default" "std" ]; }; + "async-trait" = rec { + crateName = "async-trait"; + version = "0.1.77"; + edition = "2021"; + sha256 = "1adf1jh2yg39rkpmqjqyr9xyd6849p0d95425i6imgbhx0syx069"; + procMacro = true; + authors = [ + "David Tolnay " + ]; + dependencies = [ + { + name = "proc-macro2"; + packageId = "proc-macro2"; + } + { + name = "quote"; + packageId = "quote"; + } + { + name = "syn"; + packageId = "syn 2.0.48"; + features = [ "full" "visit-mut" ]; + } + ]; + + }; "atoi" = rec { crateName = "atoi"; version = "2.0.0"; @@ -1487,7 +1513,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.41"; + packageId = "syn 2.0.48"; features = [ "full" ]; } ]; @@ -2394,7 +2420,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.41"; + packageId = "syn 2.0.48"; } ]; features = { @@ -2972,6 +2998,10 @@ rec { name = "async-channel"; packageId = "async-channel"; } + { + name = "async-trait"; + packageId = "async-trait"; + } { name = "chrono"; packageId = "chrono"; @@ -3576,7 +3606,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.41"; + packageId = "syn 2.0.48"; features = [ "full" ]; } ]; @@ -4341,7 +4371,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.41"; + packageId = "syn 2.0.48"; features = [ "full" ]; } ]; @@ -7690,7 +7720,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.41"; + packageId = "syn 2.0.48"; features = [ "full" ]; } ]; @@ -8187,7 +8217,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.41"; + packageId = "syn 2.0.48"; features = [ "full" "visit-mut" ]; } ]; @@ -8529,9 +8559,9 @@ rec { }; "proc-macro2" = rec { crateName = "proc-macro2"; - version = "1.0.70"; + version = "1.0.78"; edition = "2021"; - sha256 = "0fzxg3dkrjy101vv5b6llc8mh74xz1vhhsaiwrn68kzvynxqy9rr"; + sha256 = "1bjak27pqdn4f4ih1c9nr3manzyavsgqmf76ygw9k76q8pb2lhp2"; authors = [ "David Tolnay " "Alex Crichton " @@ -8665,9 +8695,9 @@ rec { }; "quote" = rec { crateName = "quote"; - version = "1.0.33"; + version = "1.0.35"; edition = "2018"; - sha256 = "1biw54hbbr12wdwjac55z1m2x2rylciw83qnjn564a3096jgqrsj"; + sha256 = "1vv8r2ncaz4pqdr78x7f138ka595sp2ncr1sa2plm4zxbsmwj7i9"; authors = [ "David Tolnay " ]; @@ -10269,7 +10299,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.41"; + packageId = "syn 2.0.48"; } ]; features = { @@ -11748,11 +11778,11 @@ rec { }; resolvedDefaultFeatures = [ "clone-impls" "default" "derive" "extra-traits" "full" "parsing" "printing" "proc-macro" "quote" ]; }; - "syn 2.0.41" = rec { + "syn 2.0.48" = rec { crateName = "syn"; - version = "2.0.41"; + version = "2.0.48"; edition = "2021"; - sha256 = "0sg2lzkwbwbm229p3kx1yxai43hkc0s1wmk6g47bzhvw8y6b5j24"; + sha256 = "0gqgfygmrxmp8q32lia9p294kdd501ybn6kn2h4gqza0irik2d8g"; authors = [ "David Tolnay " ]; @@ -11990,7 +12020,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.41"; + packageId = "syn 2.0.48"; } ]; @@ -12406,7 +12436,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.41"; + packageId = "syn 2.0.48"; features = [ "full" ]; } ]; @@ -12820,7 +12850,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.41"; + packageId = "syn 2.0.48"; usesDefaultFeatures = false; features = [ "full" "parsing" "printing" "visit-mut" "clone-impls" "extra-traits" "proc-macro" ]; } @@ -13814,7 +13844,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.41"; + packageId = "syn 2.0.48"; features = [ "full" ]; } { @@ -13904,7 +13934,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.41"; + packageId = "syn 2.0.48"; features = [ "visit" "full" ]; } { @@ -15388,7 +15418,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.41"; + packageId = "syn 2.0.48"; } ]; -- 2.44.1