use serde::Deserialize;
#[derive(Debug, Deserialize)]
pub(super) struct GraphResponse {
pub(super) data: Option<GraphData>,
#[serde(default)]
pub(super) errors: Vec<GraphError>,
}
#[derive(Debug, Deserialize)]
pub(super) struct GraphError {
pub(super) message: String,
}
#[derive(Debug, Deserialize)]
pub(super) struct GraphData {
pub(super) search: Option<SearchConnection>,
}
#[derive(Debug, Deserialize)]
pub(super) struct DirectGraphResponse {
pub(super) data: Option<DirectGraphData>,
#[serde(default)]
pub(super) errors: Vec<GraphError>,
}
#[derive(Debug, Deserialize)]
pub(super) struct DirectGraphData {
pub(super) repository: Option<RepositoryNode>,
}
#[derive(Debug, Deserialize)]
pub(super) struct RepositoryNode {
#[serde(rename = "pullRequest")]
pub(super) pull_request: Option<PrNode>,
}
#[derive(Debug, Deserialize)]
pub(super) struct SearchConnection {
#[serde(rename = "pageInfo")]
pub(super) page_info: PageInfo,
pub(super) nodes: Vec<PrNode>,
}
#[derive(Debug, Deserialize)]
pub(super) struct PageInfo {
#[serde(rename = "hasNextPage")]
pub(super) has_next_page: bool,
#[serde(rename = "endCursor")]
pub(super) end_cursor: Option<String>,
}
#[derive(Debug, Deserialize)]
pub(super) struct PrNode {
pub(super) number: Option<i32>,
#[serde(default)]
pub(super) title: String,
pub(super) author: Option<ActorNode>,
#[serde(default = "empty_files")]
pub(super) files: FilesConnection,
#[serde(default = "empty_issue_comments")]
pub(super) comments: IssueCommentsConnection,
#[serde(default = "empty_reviews")]
pub(super) reviews: ReviewsConnection,
#[serde(rename = "reviewThreads", default = "empty_threads")]
pub(super) review_threads: ReviewThreadsConnection,
}
const fn empty_reviews() -> ReviewsConnection {
ReviewsConnection { nodes: vec![] }
}
const fn empty_files() -> FilesConnection {
FilesConnection { nodes: vec![] }
}
const fn empty_issue_comments() -> IssueCommentsConnection {
IssueCommentsConnection { nodes: vec![] }
}
const fn empty_threads() -> ReviewThreadsConnection {
ReviewThreadsConnection { nodes: vec![] }
}
#[derive(Debug, Deserialize)]
pub(super) struct ActorNode {
pub(super) login: String,
}
#[derive(Debug, Deserialize)]
pub(super) struct FilesConnection {
pub(super) nodes: Vec<FileNode>,
}
#[derive(Debug, Deserialize)]
pub(super) struct FileNode {
pub(super) path: String,
}
#[derive(Debug, Deserialize)]
pub(super) struct IssueCommentsConnection {
pub(super) nodes: Vec<IssueCommentNode>,
}
#[derive(Debug, Deserialize)]
pub(super) struct IssueCommentNode {
#[serde(rename = "databaseId")]
pub(super) database_id: Option<i64>,
pub(super) body: String,
pub(super) author: Option<ActorNode>,
pub(super) url: Option<String>,
#[serde(rename = "reactionGroups", default)]
pub(super) reaction_groups: Vec<ReactionGroupNode>,
}
#[derive(Debug, Deserialize)]
pub(super) struct ReviewsConnection {
pub(super) nodes: Vec<ReviewNode>,
}
#[derive(Debug, Deserialize)]
pub(super) struct ReviewNode {
#[serde(rename = "databaseId")]
pub(super) database_id: Option<i64>,
pub(super) body: String,
pub(super) author: Option<ActorNode>,
pub(super) url: Option<String>,
#[serde(rename = "reactionGroups", default)]
pub(super) reaction_groups: Vec<ReactionGroupNode>,
}
#[derive(Debug, Deserialize)]
pub(super) struct ReviewThreadsConnection {
pub(super) nodes: Vec<ReviewThreadNode>,
}
#[derive(Debug, Deserialize)]
pub(super) struct ReviewThreadNode {
#[serde(rename = "isResolved", default)]
pub(super) is_resolved: bool,
pub(super) comments: ReviewCommentsConnection,
}
#[derive(Debug, Deserialize)]
pub(super) struct ReviewCommentsConnection {
pub(super) nodes: Vec<ReviewCommentNode>,
}
#[derive(Debug, Deserialize)]
pub(super) struct ReviewCommentNode {
#[serde(rename = "databaseId")]
pub(super) database_id: Option<i64>,
pub(super) body: String,
pub(super) author: Option<ActorNode>,
pub(super) path: Option<String>,
pub(super) line: Option<i32>,
pub(super) url: Option<String>,
#[serde(rename = "pullRequestReview")]
pub(super) pull_request_review: Option<ReviewRef>,
#[serde(rename = "reactionGroups", default)]
pub(super) reaction_groups: Vec<ReactionGroupNode>,
}
#[derive(Debug, Deserialize)]
pub(super) struct ReviewRef {
#[serde(rename = "databaseId")]
pub(super) database_id: Option<i64>,
}
#[derive(Debug, Default, Deserialize)]
pub(super) struct ReactionGroupNode {
#[serde(default)]
pub(super) content: Option<String>,
#[serde(default)]
pub(super) users: ReactionUsersNode,
}
#[derive(Debug, Default, Deserialize)]
pub(super) struct ReactionUsersNode {
#[serde(rename = "totalCount", default)]
pub(super) total_count: i64,
}