diff --git a/src/milestone.rs b/src/milestone.rs new file mode 100644 index 0000000..deb465d --- /dev/null +++ b/src/milestone.rs @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2023 Aravinth Manivannan + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +//! Milestone associated to a repository within a forge +use serde::{Deserialize, Serialize}; + +use crate::OpenCloseState; + +/// Milestone associated to a repository within a forge +#[derive(Clone, Debug, Serialize, Deserialize, Default, Eq, PartialEq)] +pub struct Milestone { + /// Unique identifier + pub index: usize, + + /// Short description + pub title: String, + + /// Long, multiline, description + pub description: String, + + // TODO: add validation for format "date-time" + /// Deadline after which the milestone is overdue + pub deadline: Option, + + // TODO: add validation for format "date-time" + /// Creating time + pub created: String, + + // TODO: add validation for format "date-time" + /// Last update time + pub updated: String, + + // TODO: add validation for format "date-time" + /// The last time 'state' changed to 'closed' + pub closed: String, + + /// A 'closed' milestone will not see any activity in the future, otherwise it is 'open'. + pub state: OpenCloseState, +}