use crate::models::Magnet; use crate::services::database::DatabaseService; use async_trait::async_trait; use color_eyre::eyre::Result; /// Struct to hold the list of processed and failed magnets pub struct ProcessedMagnets { pub success: Vec, pub failed: Vec, } /// Trait for actions that process magnet links #[async_trait] pub trait Action { /// Return the name of the action fn name() -> &'static str where Self: Sized; fn get_name(&self) -> &'static str; /// Process all unprocessed magnet links and return the list of processed magnets async fn process_unprocessed_magnets( &mut self, db_service: &mut DatabaseService, ) -> Result; }