use crate::effects::{
dispatch_file_pr_effect, EffectError, EffectHandler, EffectResult, FilePrEffects,
};
use crate::services::file_pr::{self, FilePRInput};
use async_trait::async_trait;
use exomonad_proto::effects::file_pr::*;
pub struct FilePRHandler;
impl FilePRHandler {
pub fn new() -> Self {
Self
}
}
impl Default for FilePRHandler {
fn default() -> Self {
Self::new()
}
}
#[async_trait]
impl EffectHandler for FilePRHandler {
fn namespace(&self) -> &str {
"file_pr"
}
async fn handle(&self, effect_type: &str, payload: &[u8]) -> EffectResult<Vec<u8>> {
dispatch_file_pr_effect(self, effect_type, payload).await
}
}
#[async_trait]
impl FilePrEffects for FilePRHandler {
async fn file_pr(&self, req: FilePrRequest) -> EffectResult<FilePrResponse> {
let input = FilePRInput {
title: req.title,
body: req.body,
};
let output = file_pr::file_pr(&input)
.map_err(|e| EffectError::custom("file_pr_error", e.to_string()))?;
Ok(FilePrResponse {
pr_url: output.pr_url,
pr_number: output.pr_number as i64,
head_branch: output.head_branch,
base_branch: output.base_branch,
created: output.created,
})
}
}