allow settings headers and json body

This commit is contained in:
Robin Appelman 2021-08-11 14:51:38 +02:00
commit a5fd6ac39b
4 changed files with 19 additions and 3 deletions

2
Cargo.lock generated
View file

@ -660,6 +660,7 @@ dependencies = [
"pin-project-lite",
"rustls",
"serde",
"serde_json",
"serde_urlencoded",
"tokio",
"tokio-rustls",
@ -705,6 +706,7 @@ dependencies = [
"reqwest",
"rss",
"serde",
"serde_json",
"tokio",
"toml",
]

View file

@ -6,8 +6,9 @@ edition = "2018"
[dependencies]
rss = "1.10"
reqwest = { version = "0.11", default-features = false, features = ["rustls-tls"] }
reqwest = { version = "0.11", default-features = false, features = ["rustls-tls", "json"] }
tokio = { version = "1.0", features = ["macros", "rt-multi-thread"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1"
toml = "0.5"
color-eyre = "0.5"

View file

@ -2,6 +2,8 @@ use color_eyre::{eyre::WrapErr, Result};
use serde::Deserialize;
use std::fs::read_to_string;
use tokio::time::Duration;
use std::collections::HashMap;
use serde_json::Value;
#[derive(Debug, Deserialize)]
pub struct Config {
@ -13,6 +15,10 @@ pub struct Config {
pub struct FeedConfig {
pub feed: String,
pub hook: String,
#[serde(default)]
pub headers: HashMap<String, String>,
#[serde(default)]
pub body: Value,
}
impl Config {

View file

@ -34,8 +34,15 @@ async fn main() -> Result<()> {
for feed in config.feed.iter() {
match fetcher.is_feed_updated(&feed.feed).await {
Ok(true) => {
println!("Trigering hook for {}", feed.feed);
fetcher.client.post(&feed.hook).send().await?;
println!("Triggering hook for {}", feed.feed);
let mut req = fetcher.client.post(&feed.hook);
for (key, value) in &feed.headers {
req = req.header(key, value);
}
if !feed.body.is_null() {
req = req.json(&feed.body);
}
req.send().await?;
}
Err(e) => eprintln!("{:#}", e),
Ok(false) => {}