use crate::publish::article::Article;
use crate::publish::target_kind::TargetKind;
use crate::publish::targets::devto::DevTo;
use crate::publish::targets::hashnode::Hashnode;
use crate::publish::targets::platform::Platform;
use anyhow::Result;
#[derive(Debug)]
pub struct PublishOutcome {
pub message: String,
}
pub struct HttpTarget {
pub client: reqwest::Client,
pub base_url: String,
}
impl HttpTarget {
pub fn new(client: reqwest::Client, base_url: impl Into<String>) -> Self {
Self {
client,
base_url: base_url.into(),
}
}
}
pub enum Target {
Devto(DevTo),
Hashnode(Hashnode),
Platform(Platform),
}
impl Target {
pub fn kind(&self) -> TargetKind {
match self {
Self::Devto(_) => TargetKind::Devto,
Self::Hashnode(_) => TargetKind::Hashnode,
Self::Platform(_) => TargetKind::Platform,
}
}
pub async fn publish(&self, article: &Article, update: bool) -> Result<PublishOutcome> {
match self {
Self::Devto(t) => t.publish(article, update).await,
Self::Hashnode(t) => t.publish(article, update).await,
Self::Platform(t) => t.publish(article, update).await,
}
}
}