Berke 1 год назад
Родитель
Сommit
50ad480b70

+ 1 - 1
src/charts.rs

@@ -296,7 +296,7 @@ impl canvas::Program<Message> for AxisLabelXCanvas<'_> {
                         let time_as_datetime = NaiveDateTime::from_timestamp(time / 1000, 0);
                         
                         let time_format: &str;
-                        if let Some(_) = self.timeframe {
+                        if self.timeframe.is_some() {
                             time_format = "%H:%M";
                         } else {
                             time_format = "%M:%S";

+ 2 - 2
src/charts/candlestick.rs

@@ -1,6 +1,6 @@
 use std::collections::BTreeMap;
 use iced::{
-    alignment, mouse, widget::{button, canvas::{self, event::{self, Event}, stroke::Stroke, Cache, Canvas, Geometry, Path}}, Color, Element, Length, Point, Rectangle, Renderer, Size, Theme
+    alignment, mouse, widget::{button, canvas::{self, event::{self, Event}, stroke::Stroke, Canvas, Geometry, Path}}, Color, Element, Length, Point, Rectangle, Renderer, Size, Theme
 };
 use iced::widget::{Column, Row, Container, Text};
 use crate::data_providers::Kline;
@@ -505,7 +505,7 @@ impl canvas::Program<Message> for CandlestickChart {
                     frame.stroke(&line, Stroke::default().with_color(Color::from_rgba8(200, 200, 200, 0.6)).with_width(1.0));
 
                     if let Some((_, kline)) = self.data_points.iter()
-                        .find(|(time, _)| **time == rounded_timestamp as i64) {
+                        .find(|(time, _)| **time == rounded_timestamp) {
 
                         
                         let tooltip_text: String = if kline.volume.0 != -1.0 {

+ 1 - 1
src/charts/heatmap.rs

@@ -1,7 +1,7 @@
 use std::{collections::BTreeMap, rc::Rc};
 use chrono::NaiveDateTime;
 use iced::{
-    alignment, color, mouse, widget::{button, canvas::{self, event::{self, Event}, stroke::Stroke, Cache, Canvas, Geometry, Path}}, window, Border, Color, Element, Length, Point, Rectangle, Renderer, Size, Theme, Vector
+    alignment, mouse, widget::{button, canvas::{self, event::{self, Event}, stroke::Stroke, Canvas, Geometry, Path}}, Color, Element, Length, Point, Rectangle, Renderer, Size, Theme
 };
 use iced::widget::{Column, Row, Container, Text};
 

+ 5 - 6
src/data_providers/binance/market_data.rs

@@ -1,7 +1,6 @@
-use hyper::client::conn;
 use iced::{futures, stream};  
 use futures::stream::{Stream, StreamExt};
-use serde::{de, Deserializer};
+use serde::{Deserializer};
 use futures::sink::SinkExt;
 
 use serde_json::Value;
@@ -9,13 +8,13 @@ use crate::{Ticker, Timeframe};
 
 use bytes::Bytes;
 
-use sonic_rs::{LazyValue, JsonValueTrait};
+use sonic_rs::{JsonValueTrait};
 use sonic_rs::{Deserialize, Serialize}; 
-use sonic_rs::{to_array_iter, to_object_iter_unchecked};
+use sonic_rs::{to_object_iter_unchecked};
 
 use anyhow::{Context, Result};
 
-use fastwebsockets::{Frame, FragmentCollector, OpCode};
+use fastwebsockets::{FragmentCollector, OpCode};
 use http_body_util::Empty;
 use hyper::header::{CONNECTION, UPGRADE};
 use hyper::upgrade::Upgraded;
@@ -691,7 +690,7 @@ pub async fn fetch_ticksize(ticker: Ticker) -> Result<f32, reqwest::Error> {
         Ticker::LTCUSDT => "LTCUSDT",
     };
 
-    let url = format!("https://fapi.binance.com/fapi/v1/exchangeInfo");
+    let url = "https://fapi.binance.com/fapi/v1/exchangeInfo".to_string();
 
     let response = reqwest::get(&url).await?;
     let text = response.text().await?;

+ 6 - 7
src/data_providers/bybit/market_data.rs

@@ -1,4 +1,3 @@
-use hyper::client::conn;
 use iced::{stream, futures};
 use futures::sink::SinkExt;
 use futures::stream::{Stream, StreamExt};
@@ -6,9 +5,9 @@ use futures::stream::{Stream, StreamExt};
 use serde_json::Value;
 use bytes::Bytes;
 
-use sonic_rs::{LazyValue, JsonValueTrait};
+use sonic_rs::{JsonValueTrait};
 use sonic_rs::{Deserialize, Serialize}; 
-use sonic_rs::{to_array_iter, to_object_iter_unchecked};
+use sonic_rs::{to_object_iter_unchecked};
 
 use anyhow::anyhow;
 use anyhow::{Context, Result};
@@ -189,7 +188,7 @@ fn feed_de(bytes: &Bytes) -> Result<StreamData> {
                 }
             }
         } else if k == "type" {
-            data_type = v.as_str().unwrap().to_owned();
+            v.as_str().unwrap().clone_into(&mut data_type);
         } else if k == "data" {
             match stream_type {
                 Some(StreamWrapper::Trade) => {
@@ -265,7 +264,7 @@ async fn connect(domain: &str) -> Result<FragmentCollector<TokioIo<Upgraded>>> {
 
 	let tls_stream: tokio_rustls::client::TlsStream<TcpStream> = tls_connector.connect(domain, tcp_stream).await?;
 
-    let url = format!("wss://stream.bybit.com/v5/public/linear");
+    let url = "wss://stream.bybit.com/v5/public/linear".to_string();
 
 	let req: Request<Empty<Bytes>> = Request::builder()
 	.method("GET")
@@ -373,7 +372,7 @@ pub fn connect_market_stream(ticker: Ticker) -> impl Stream<Item = Event> {
                                                 for de_trade in de_trade_vec.iter() {
                                                     let trade = Trade {
                                                         time: de_trade.time as i64,
-                                                        is_sell: if de_trade.is_sell == "Sell" { true } else { false },
+                                                        is_sell: de_trade.is_sell == "Sell",
                                                         price: str_f32_parse(&de_trade.price),
                                                         qty: str_f32_parse(&de_trade.qty),
                                                     };
@@ -619,7 +618,7 @@ pub async fn fetch_klines(ticker: Ticker, timeframe: Timeframe) -> Result<Vec<Kl
         })
     }).collect();
 
-    Ok(klines?)
+    klines
 }
 
 pub async fn fetch_ticksize(ticker: Ticker) -> Result<f32> {

+ 29 - 29
src/main.rs

@@ -334,7 +334,7 @@ impl State {
                 match dashboard.pane_change_timeframe(pane_id, timeframe) {
                     Ok(stream_type) => {
                         if let StreamType::Kline { exchange, ticker, timeframe } = stream_type {
-                            let stream = stream_type.clone();
+                            let stream = *stream_type;
             
                             match exchange {
                                 Exchange::BinanceFutures => {
@@ -444,9 +444,9 @@ impl State {
 
                                 self.pane_streams
                                     .entry(Exchange::BinanceFutures)
-                                    .or_insert_with(HashMap::new)
+                                    .or_default()
                                     .entry(ticker)
-                                    .or_insert_with(HashSet::new)
+                                    .or_default()
                                     .remove(&stream_type);
                             }
                         }
@@ -462,9 +462,9 @@ impl State {
 
                                 self.pane_streams
                                     .entry(Exchange::BinanceFutures)
-                                    .or_insert_with(HashMap::new)
+                                    .or_default()
                                     .entry(ticker)
-                                    .or_insert_with(HashSet::new)
+                                    .or_default()
                                     .remove(&stream_type);
                             }
                         }
@@ -487,9 +487,9 @@ impl State {
 
                                 self.pane_streams
                                     .entry(Exchange::BybitLinear)
-                                    .or_insert_with(HashMap::new)
+                                    .or_default()
                                     .entry(ticker)
-                                    .or_insert_with(HashSet::new)
+                                    .or_default()
                                     .remove(&stream_type);
                             }
                         }
@@ -505,9 +505,9 @@ impl State {
 
                                 self.pane_streams
                                     .entry(Exchange::BybitLinear)
-                                    .or_insert_with(HashMap::new)
+                                    .or_default()
                                     .entry(ticker)
-                                    .or_insert_with(HashSet::new)
+                                    .or_default()
                                     .remove(&stream_type);
                             }
                         }
@@ -754,7 +754,7 @@ impl State {
                 if content == "Footprint chart" || content == "Candlestick chart" || content == "Heatmap chart" {
                     for stream in pane_stream.iter() {
                         if let StreamType::Kline { exchange, ticker, timeframe } = stream {
-                            let stream_clone = stream.clone();
+                            let stream_clone = *stream;
                 
                             if content == "Candlestick chart" || content == "Footprint chart" {
                                 let fetch_klines = create_fetch_klines_task(exchange, ticker, timeframe, stream_clone, pane_id);
@@ -778,10 +778,10 @@ impl State {
                         StreamType::Kline { exchange, ticker, .. } | StreamType::DepthAndTrades { exchange, ticker } => {
                             self.pane_streams
                                 .entry(*exchange)
-                                .or_insert_with(HashMap::new)
+                                .or_default()
                                 .entry(*ticker)
-                                .or_insert_with(HashSet::new)
-                                .insert(stream.clone());
+                                .or_default()
+                                .insert(*stream);
                         }
                         _ => {}
                     }
@@ -822,8 +822,8 @@ impl State {
 
                 let ticksize_tasks = ticksize_fetch_all_task(&self.pane_streams);
 
-                tasks.extend(kline_tasks.into_iter());
-                tasks.extend(ticksize_tasks.into_iter());
+                tasks.extend(kline_tasks);
+                tasks.extend(ticksize_tasks);
 
                 Task::batch(tasks)
             }
@@ -900,7 +900,7 @@ impl State {
                         _ => None,
                     }
                 })
-            }).unwrap_or_else(|| None);
+            }).unwrap_or(None);
             
             let mut stream_info_element: Row<Message> = Row::new();
 
@@ -1302,11 +1302,11 @@ trait ChartView {
 
 impl ChartView for HeatmapChart {
     fn view(&self, pane: &PaneState) -> Element<Message> {
-        let underlay;
+        
 
         let pane_id = pane.id;
 
-        underlay = self.view().map(move |message| Message::ChartUserUpdate(message, pane_id));
+        let underlay = self.view().map(move |message| Message::ChartUserUpdate(message, pane_id));
 
         if pane.show_modal {
             let size_filter = &self.get_size_filter();
@@ -1360,11 +1360,11 @@ impl ChartView for FootprintChart {
 }
 impl ChartView for TimeAndSales {
     fn view(&self, pane: &PaneState) -> Element<Message> {
-        let underlay;
+        
 
         let pane_id = pane.id;
 
-        underlay = self.view();
+        let underlay = self.view();
 
         if pane.show_modal {
             let size_filter = &self.get_size_filter();
@@ -1436,9 +1436,9 @@ fn view_chart<'a, C: ChartView>(
     container.into()
 }
 
-fn view_starter<'a>(
-    pane: &'a PaneState,
-) -> Element<'a, Message> {
+fn view_starter(
+    pane: &PaneState,
+) -> Element<'_, Message> {
     let content_names = ["Heatmap chart", "Footprint chart", "Candlestick chart", "Time&Sales"];
     
     let content_selector = content_names.iter().fold(
@@ -1640,9 +1640,9 @@ fn klines_fetch_all_task(stream_types: &HashMap<Exchange, HashMap<Ticker, HashSe
         }
 
         for (ticker, timeframe) in kline_fetches {
-            let ticker = ticker.clone();
-            let timeframe = timeframe.clone();
-            let exchange = exchange.clone();
+            let ticker = ticker;
+            let timeframe = timeframe;
+            let exchange = *exchange;
 
             match exchange {
                 Exchange::BinanceFutures => {
@@ -1690,8 +1690,8 @@ fn ticksize_fetch_all_task(stream_types: &HashMap<Exchange, HashMap<Ticker, Hash
         }
 
         for ticker in ticksize_fetches {
-            let ticker = ticker.clone();
-            let exchange = exchange.clone();
+            let ticker = ticker;
+            let exchange = *exchange;
 
             match exchange {
                 Exchange::BinanceFutures => {
@@ -1739,7 +1739,7 @@ fn create_fetch_klines_task(
                 .map_err(|err| format!("{err}")),
             move |klines| Message::FetchEvent(klines, stream_clone, pane_id),
         ),
-        _ => return Task::none(),
+        _ => Task::none(),
     }
 }
 

+ 9 - 9
src/screen/dashboard.rs

@@ -278,7 +278,7 @@ impl Dashboard {
         let mut found_match = false;
 
         for (_, pane_state) in self.panes.iter_mut() {
-            if pane_state.matches_stream(&stream_type) {
+            if pane_state.matches_stream(stream_type) {
                 match stream_type {
                     StreamType::Kline { timeframe, .. } => {
                         let timeframe_u16 = timeframe.to_minutes();
@@ -317,7 +317,7 @@ impl Dashboard {
         let mut found_match = false;
 
         for (_, pane_state) in self.panes.iter_mut() {
-            if pane_state.matches_stream(&stream_type) {
+            if pane_state.matches_stream(stream_type) {
                 match &mut pane_state.content {
                     PaneContent::Footprint(_) => {
                         pane_state.settings.min_tick_size = Some(tick_sizes);
@@ -345,7 +345,7 @@ impl Dashboard {
         let mut found_match = false;
     
         for (_, pane_state) in self.panes.iter_mut() {
-            if pane_state.matches_stream(&stream_type) {
+            if pane_state.matches_stream(stream_type) {
                 match &mut pane_state.content {
                     PaneContent::Candlestick(chart) => chart.update_latest_kline(kline),
                     PaneContent::Footprint(chart) => chart.update_latest_kline(kline),
@@ -402,17 +402,17 @@ impl Dashboard {
             for stream_type in &pane_state.stream {
                 match stream_type {
                     StreamType::Kline { exchange, ticker, timeframe } => {
-                        let exchange = exchange.clone();
-                        let ticker = ticker.clone();
-                        let timeframe = timeframe.clone();
+                        let exchange = *exchange;
+                        let ticker = *ticker;
+                        let timeframe = *timeframe;
 
-                        let exchange_map = pane_streams.entry(exchange.clone()).or_insert(HashMap::new());
+                        let exchange_map = pane_streams.entry(exchange).or_insert(HashMap::new());
                         let ticker_map = exchange_map.entry(ticker).or_insert(HashSet::new());
                         ticker_map.insert(StreamType::Kline { exchange, ticker, timeframe });
                     },
                     StreamType::DepthAndTrades { exchange, ticker } => {
-                        let exchange = exchange.clone();
-                        let ticker = ticker.clone();
+                        let exchange = *exchange;
+                        let ticker = *ticker;
 
                         let exchange_map = pane_streams.entry(exchange).or_insert(HashMap::new());
                         let ticker_map = exchange_map.entry(ticker).or_insert(HashSet::new());

+ 1 - 1
src/style.rs

@@ -1,6 +1,6 @@
 use iced::widget::button::Status;
 use iced::widget::container::Style;
-use iced::{theme, Border, Color, Font, Theme, overlay};
+use iced::{Border, Color, Font, Theme, overlay};
 use iced::widget::pick_list;
 
 pub const ICON_BYTES: &[u8] = include_bytes!("fonts/icons.ttf");