Rust + Iced - Run code when app starts

⚓ Rust    📅 2026-03-24    👤 surdeus    👁️ 1      

surdeus

I have a Rust app that utilizes Iced for the GUI. It works. On the main screen I have a button which sends a message to the Iced update function. The code associated with this message runs code that updates an SQLite database which in turn allows me to update 3 state variables. How can I run this code when the app starts instead of having to click a button? I was unsure what code to include so below is the implementation code for the State struct.

impl State {

    fn new() -> Self {
        Self {
            records_read: 0,
            records_inserted: 0,
            records_updated: 0,
            screen: Screen::HomeScreen,
            closing_values: Vec::new(),
        }
    }

    fn update(&mut self, msg: Message) -> Task<Message> {

        match msg {

            Message::Exit => {
                std::process::exit(0);
            }

            Message::GoToHomeScreen => {
                self.screen = Screen::HomeScreen;
                self.records_read = 0;
                self.records_inserted = 0;
                Task::none()
            }

            Message::GoToUpdateDataBaseScreen => {
                self.screen = Screen::UpdateDatabaseScreen;

                let record_data = match insert_csv_data_into_db() {
                    Ok(data) => {
                        data
                    },
                    Err(e) => {
                        if let IoSqlError::IoError(io_err) = e {
                            println!("I/O error details: {}", io_err);
                        } else if let IoSqlError::SqlError(sql_err) = e {
                            println!("SQL error details: {}", sql_err);
                        }
                        return Task::none();
                    }
                };

                self.records_read = record_data[0];
                self.records_inserted = record_data[1];
                self.records_updated = record_data[2];
                Task::none()
            }

            Message::GoToMinCloseScreen => {

                self.screen = Screen::MinCloseScreen;

                let query_results = match get_close(QueryType::Min) {
                    Ok(results) => results,
                    Err(e) => {
                        if let IoSqlError::IoError(io_err) = e {
                            println!("I/O error details: {}", io_err);
                        } else if let IoSqlError::SqlError(sql_err) = e {
                            println!("SQL error details: {}", sql_err);
                        }
                        return Task::none();
                    }
                };

                self.closing_values = query_results;
                Task::none()
            }

            Message::GoToMaxCloseScreen => {

                self.screen = Screen::MaxCloseScreen;

                let query_results = match get_close(QueryType::Max) {
                    Ok(results) => results,
                    Err(e) => {
                        if let IoSqlError::IoError(io_err) = e {
                            println!("I/O error details: {}", io_err);
                        } else if let IoSqlError::SqlError(sql_err) = e {
                            println!("SQL error details: {}", sql_err);
                        }
                        return Task::none();
                    }
                };

                self.closing_values = query_results;
                Task::none()
            }
        } // end of match statement
    }

    fn view(&self) -> iced::Element<'_, Message> {

        match self.screen {

            Screen::HomeScreen => {
                home_view()
            } 

            Screen::UpdateDatabaseScreen => {
                update_db_view(self.records_read, self.records_inserted, self.records_updated)
            } 

            Screen::MinCloseScreen => {
                min_max_close_view("Min", self.closing_values.as_ref())
            } 

            Screen::MaxCloseScreen => {
                min_max_close_view("Max", self.closing_values.as_ref())
            } 

        } 
    } 
}


2 posts - 2 participants

Read full topic

🏷️ Rust_feed