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", "pin-project-lite",
"rustls", "rustls",
"serde", "serde",
"serde_json",
"serde_urlencoded", "serde_urlencoded",
"tokio", "tokio",
"tokio-rustls", "tokio-rustls",
@ -705,6 +706,7 @@ dependencies = [
"reqwest", "reqwest",
"rss", "rss",
"serde", "serde",
"serde_json",
"tokio", "tokio",
"toml", "toml",
] ]

View file

@ -6,8 +6,9 @@ edition = "2018"
[dependencies] [dependencies]
rss = "1.10" 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"] } tokio = { version = "1.0", features = ["macros", "rt-multi-thread"] }
serde = { version = "1.0", features = ["derive"] } serde = { version = "1.0", features = ["derive"] }
serde_json = "1"
toml = "0.5" toml = "0.5"
color-eyre = "0.5" color-eyre = "0.5"

View file

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

View file

@ -34,8 +34,15 @@ async fn main() -> Result<()> {
for feed in config.feed.iter() { for feed in config.feed.iter() {
match fetcher.is_feed_updated(&feed.feed).await { match fetcher.is_feed_updated(&feed.feed).await {
Ok(true) => { Ok(true) => {
println!("Trigering hook for {}", feed.feed); println!("Triggering hook for {}", feed.feed);
fetcher.client.post(&feed.hook).send().await?; 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), Err(e) => eprintln!("{:#}", e),
Ok(false) => {} Ok(false) => {}