upend/src/extractors/mod.rs

49 lines
1.2 KiB
Rust
Raw Normal View History

2022-02-15 13:32:46 +01:00
use crate::{
addressing::Address,
database::{entry::Entry, UpEndConnection},
util::jobs::JobContainer,
};
use anyhow::Result;
use async_trait::async_trait;
use std::sync::{Arc, RwLock};
2022-02-10 11:38:45 +01:00
#[cfg(feature = "extractors-web")]
pub mod web;
2022-02-15 13:32:46 +01:00
#[async_trait]
pub trait Extractor {
async fn get(
&self,
address: Address,
job_container: Arc<RwLock<JobContainer>>,
) -> Result<Vec<Entry>>;
async fn insert_info(
&self,
address: Address,
connection: UpEndConnection,
job_container: Arc<RwLock<JobContainer>>,
) -> Result<()> {
let entries = self.get(address, job_container).await?;
Ok(actix_web::web::block::<_, _, anyhow::Error>(move || {
connection.transaction(|| {
for entry in entries {
connection.insert_entry(entry)?;
}
Ok(())
})
})
.await?)
}
async fn insert_info_fnf(
&self,
address: Address,
connection: UpEndConnection,
job_container: Arc<RwLock<JobContainer>>,
) {
let _ = self.insert_info(address, connection, job_container).await;
}
}