generated from luke-else/egui-template
	Working on building out async functionality
This commit is contained in:
		@@ -1 +1,12 @@
 | 
			
		||||
use super::req::Requests;
 | 
			
		||||
 | 
			
		||||
#[derive(PartialEq, Eq, Debug)]
 | 
			
		||||
pub struct Metar {
 | 
			
		||||
    pub api: Requests,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Default for Metar {
 | 
			
		||||
    fn default() -> Self {
 | 
			
		||||
        Metar { api: Requests{} }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1 +1,28 @@
 | 
			
		||||
use std::error::Error;
 | 
			
		||||
 | 
			
		||||
use tokio::{io::AsyncReadExt, net::TcpStream};
 | 
			
		||||
 | 
			
		||||
#[derive(PartialEq, Eq, Debug)]
 | 
			
		||||
pub struct Requests {}
 | 
			
		||||
 | 
			
		||||
impl Requests {
 | 
			
		||||
    pub async fn make_request(&self, target: String) -> Result<String, Box<dyn Error>> {
 | 
			
		||||
        
 | 
			
		||||
        let tasks = tokio::spawn(async {
 | 
			
		||||
            let mut buf: String = String::from("");
 | 
			
		||||
 | 
			
		||||
            let mut stream = match TcpStream::connect(target).await {
 | 
			
		||||
                Ok(stream) => stream,
 | 
			
		||||
                Err(err) => return Err(Box::new(err)),
 | 
			
		||||
            };
 | 
			
		||||
            // Buffer to read HTTP request into
 | 
			
		||||
            let _ = stream.read_to_string(&mut buf);
 | 
			
		||||
 | 
			
		||||
            Ok(buf)
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        let buf = tasks.await??;
 | 
			
		||||
 | 
			
		||||
        Ok(buf)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,14 @@
 | 
			
		||||
use egui::Key;
 | 
			
		||||
 | 
			
		||||
use crate::app::metar::Metar;
 | 
			
		||||
 | 
			
		||||
use super::Tab;
 | 
			
		||||
 | 
			
		||||
#[derive(Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct MetarTab {
 | 
			
		||||
    pub icaos: Vec<String>,
 | 
			
		||||
    pub metars: Vec<String>,
 | 
			
		||||
    pub metar: Metar
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Default for MetarTab {
 | 
			
		||||
@@ -13,12 +16,13 @@ impl Default for MetarTab {
 | 
			
		||||
        Self {
 | 
			
		||||
            icaos: vec!["".to_string()],
 | 
			
		||||
            metars: vec![],
 | 
			
		||||
            metar: Metar::default()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Tab for MetarTab {
 | 
			
		||||
    fn display_tab(&mut self, ctx: &egui::Context, frame: &egui::Frame) {
 | 
			
		||||
    async fn display_tab(&mut self, ctx: &egui::Context, frame: &egui::Frame) {
 | 
			
		||||
        egui::CentralPanel::default().frame(*frame).show(ctx, |ui| {
 | 
			
		||||
            // Given Key pressed, place focus on next item
 | 
			
		||||
            let new_icao_focus: bool = ui.input(|i| i.key_pressed(Key::Space));
 | 
			
		||||
@@ -29,6 +33,7 @@ impl Tab for MetarTab {
 | 
			
		||||
 | 
			
		||||
            if ui.button("Add More").clicked() || new_icao_focus {
 | 
			
		||||
                self.icaos.push("".to_string());
 | 
			
		||||
                self.metar.api.make_request(String::from("google.com"));
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -65,7 +65,7 @@ impl TabState {
 | 
			
		||||
 | 
			
		||||
/// Tab traits that allow tab display on the main application window
 | 
			
		||||
pub trait Tab {
 | 
			
		||||
    fn display_tab(&mut self, ctx: &egui::Context, frame: &egui::Frame);
 | 
			
		||||
    async fn display_tab(&mut self, ctx: &egui::Context, frame: &egui::Frame);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Function to draw main set of tabs on the window
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								src/error.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/error.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
use strum::Display;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#[derive(Debug, Display)]
 | 
			
		||||
pub enum AvBagError {
 | 
			
		||||
    UIError,
 | 
			
		||||
    RequestNotAvailable
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl std::error::Error for AvBagError {}
 | 
			
		||||
@@ -1,10 +1,12 @@
 | 
			
		||||
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release
 | 
			
		||||
mod app;
 | 
			
		||||
mod error;
 | 
			
		||||
mod theme;
 | 
			
		||||
use app::App;
 | 
			
		||||
use egui::ViewportBuilder;
 | 
			
		||||
 | 
			
		||||
fn main() -> Result<(), eframe::Error> {
 | 
			
		||||
#[tokio::main]
 | 
			
		||||
async fn main() -> Result<(), Box<dyn std::error::Error>> {
 | 
			
		||||
    // Log to stdout (if you run with `RUST_LOG=debug`).
 | 
			
		||||
    tracing_subscriber::fmt::init();
 | 
			
		||||
 | 
			
		||||
@@ -18,5 +20,5 @@ fn main() -> Result<(), eframe::Error> {
 | 
			
		||||
    let app = Box::new(App::default());
 | 
			
		||||
 | 
			
		||||
    //Start rendering and run the application
 | 
			
		||||
    eframe::run_native(app.name, options, Box::new(|_cc| Ok(app)))
 | 
			
		||||
    Ok(eframe::run_native(app.name, options, Box::new(|_cc| Ok(app)))?)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user