josh_github_graphql/operations/
check_runs.rs1use josh_github_codegen_graphql::{
2 check_runs_discover::{
3 self, CheckRunsDiscoverNodes, CheckRunsDiscoverNodesOnCommitCheckSuites,
4 CheckRunsDiscoverNodesOnCommitCheckSuitesNodes, _CheckSuiteInfo,
5 },
6 CheckRunsDiscover, Id, NodeId,
7};
8
9use crate::connection::GithubApiConnection;
10
11impl GithubApiConnection {
12 pub async fn check_run_state_discover(
14 &self,
15 node_ids: Vec<NodeId>,
16 ) -> anyhow::Result<Vec<(NodeId, Vec<(NodeId, Id, usize)>)>> {
17 let variables = check_runs_discover::Variables {
18 node_ids: node_ids.clone(),
19 };
20
21 let response = self.make_request::<CheckRunsDiscover>(variables).await?;
22 let check_suites = response
23 .nodes
24 .into_iter()
25 .zip(node_ids)
26 .filter_map(|(node, id)| match node {
27 Some(CheckRunsDiscoverNodes::Commit(commit)) => match commit.check_suites {
28 Some(CheckRunsDiscoverNodesOnCommitCheckSuites {
29 nodes: Some(check_suites),
30 }) => Some((id, check_suites)),
31 _ => None,
32 },
33 _ => None,
34 });
35
36 let result = check_suites
37 .into_iter()
38 .map(|(id, check_suites)| {
39 let check_runs = check_suites
40 .into_iter()
41 .flatten()
42 .filter_map(|check_suite| match check_suite {
43 CheckRunsDiscoverNodesOnCommitCheckSuitesNodes {
44 check_suite_info: _CheckSuiteInfo { id, app: Some(app) },
45 check_runs: Some(check_runs),
46 } => Some((id, app.id, check_runs.total_count as usize)),
47 _ => None,
48 });
49
50 (id, check_runs.collect::<Vec<_>>())
51 })
52 .collect::<Vec<_>>();
53
54 Ok(result)
55 }
56}