Added docker building.
This commit is contained in:
53
src/main.rs
53
src/main.rs
@ -1,8 +1,9 @@
|
||||
use futures::{stream::FuturesUnordered, StreamExt};
|
||||
use futures::{stream::FuturesUnordered, Future};
|
||||
use std::sync::Arc;
|
||||
use tokio::sync::RwLock;
|
||||
|
||||
use clap::Parser;
|
||||
use futures::StreamExt;
|
||||
use logging::setup_logger;
|
||||
|
||||
mod args;
|
||||
@ -11,7 +12,12 @@ mod logging;
|
||||
mod server;
|
||||
pub mod utils;
|
||||
|
||||
#[tokio::main(flavor = "current_thread")]
|
||||
async fn error_wrap<T>(fut: impl Future<Output = std::io::Result<T>>) -> anyhow::Result<T> {
|
||||
let res = fut.await?;
|
||||
Ok(res)
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> anyhow::Result<()> {
|
||||
dotenvy::dotenv().ok();
|
||||
let args = args::Arguments::parse();
|
||||
@ -22,29 +28,24 @@ async fn main() -> anyhow::Result<()> {
|
||||
let bot_token = token_lock.clone();
|
||||
let server_token = token_lock.clone();
|
||||
|
||||
let local_set = tokio::task::LocalSet::new();
|
||||
local_set
|
||||
.run_until(async {
|
||||
let tasks = vec![
|
||||
tokio::task::spawn_local(bot::start(args.bot.clone(), bot_token)),
|
||||
tokio::task::spawn_local(server::start(args.server.clone(), server_token)),
|
||||
];
|
||||
// Here we wait for one async task to complete.
|
||||
let completed = tasks
|
||||
.into_iter()
|
||||
.collect::<FuturesUnordered<_>>()
|
||||
.take(1)
|
||||
.collect::<Vec<_>>()
|
||||
.await;
|
||||
// Now we get all completed futures (one future),
|
||||
// and return it's result.
|
||||
if let Some(fut) = completed.into_iter().next() {
|
||||
fut?
|
||||
} else {
|
||||
Ok(())
|
||||
}
|
||||
})
|
||||
.await?;
|
||||
let web_server = server::create(args.server.clone(), server_token)?;
|
||||
let bot_future = bot::start(args.bot.clone(), bot_token);
|
||||
|
||||
Ok(())
|
||||
let tasks = [
|
||||
tokio::task::spawn(bot_future),
|
||||
tokio::task::spawn(error_wrap(web_server)),
|
||||
];
|
||||
|
||||
let completed = tasks
|
||||
.into_iter()
|
||||
.collect::<FuturesUnordered<_>>()
|
||||
.take(1)
|
||||
.collect::<Vec<_>>()
|
||||
.await;
|
||||
|
||||
if let Some(fut) = completed.into_iter().next() {
|
||||
fut?
|
||||
} else {
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user