1use std::fmt::Display;
2
3use chrono::{DateTime, Utc};
4use serde::Deserialize;
5
6use crate::api::label::Label;
7use crate::api::milestone::Milestone;
8use crate::api::pull_request_meta::PullRequestMeta;
9use crate::api::state_type::StateType;
10use crate::api::user::User;
11
12#[derive(Debug, Clone, Deserialize)]
13pub struct Issue {
14 pub title: String,
15 pub number: usize,
16 pub labels: Vec<Label>,
17 pub assignees: Option<Vec<User>>,
18 pub body: String,
19 pub state: StateType,
20 pub pull_request: Option<PullRequestMeta>,
21 pub milestone: Option<Milestone>,
22 pub closed_at: Option<DateTime<Utc>>,
23 pub created_at: DateTime<Utc>,
24 pub due_date: Option<DateTime<Utc>>,
25 pub updated_at: DateTime<Utc>,
26}
27
28impl Display for Issue {
29 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
30 write!(f, "#{} {}", self.number, self.title)
31 }
32}