elizaos_plugin_github/actions/
mod.rs1#![allow(missing_docs)]
2
3pub mod create_branch;
4pub mod create_comment;
5pub mod create_issue;
6pub mod create_pull_request;
7pub mod merge_pull_request;
8pub mod push_code;
9pub mod review_pull_request;
10
11pub use create_branch::CreateBranchAction;
12pub use create_comment::CreateCommentAction;
13pub use create_issue::CreateIssueAction;
14pub use create_pull_request::CreatePullRequestAction;
15pub use merge_pull_request::MergePullRequestAction;
16pub use push_code::PushCodeAction;
17pub use review_pull_request::ReviewPullRequestAction;
18
19use async_trait::async_trait;
20use serde::{Deserialize, Serialize};
21use serde_json::Value;
22
23use crate::error::Result;
24use crate::GitHubService;
25
26#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct ActionContext {
28 pub message: Value,
29 pub owner: String,
30 pub repo: String,
31 pub state: Value,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize)]
35pub struct ActionResult {
36 pub success: bool,
37 pub message: String,
38 pub data: Value,
39}
40
41impl ActionResult {
42 pub fn success(message: impl Into<String>, data: Value) -> Self {
44 Self {
45 success: true,
46 message: message.into(),
47 data,
48 }
49 }
50
51 pub fn error(message: impl Into<String>) -> Self {
52 Self {
53 success: false,
54 message: message.into(),
55 data: Value::Null,
56 }
57 }
58}
59
60#[async_trait]
61pub trait GitHubAction: Send + Sync {
62 fn name(&self) -> &str;
63 fn description(&self) -> &str;
64 fn similes(&self) -> Vec<&str>;
65 async fn validate(&self, context: &ActionContext) -> Result<bool>;
66 async fn handler(
67 &self,
68 context: &ActionContext,
69 service: &GitHubService,
70 ) -> Result<ActionResult>;
71}