use user::ShortUser;
use serde;
use serde_json;
use helpers::Class;
pub trait ChangeSetList {}
macro_rules! changesetlist_with_common_fields_and_impl {
(
$(#[$attr:meta])*
pub struct $name:ident {
$(
$(#[$field_attr:meta])*
pub $field:ident: $field_type:ty,
)*
$(private_fields {
$(
$(#[$private_field_attr:meta])*
$private_field:ident: $private_field_type:ty
),* $(,)*
})*
}
) => {
$(#[$attr])*
pub struct $name {
/// Origin of the changes
pub kind: Option<String>,
pub items: Vec<CommonChangeSet>,
$(
$(#[$field_attr])*
pub $field: $field_type,
)*
$($(
$(#[$private_field_attr])*
$private_field: $private_field_type,
)*)*
}
impl ChangeSetList for $name {}
};
}
changesetlist_with_common_fields_and_impl!(#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct CommonChangeSetList {
#[serde(rename = "_class")]
pub class: Option<String>,
private_fields {
#[serde(flatten)]
other_fields: serde_json::Value,
}
});
specialize!(CommonChangeSetList => ChangeSetList);
changesetlist_with_common_fields_and_impl!(#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct EmptyChangeSet {});
register_class!("hudson.scm.EmptyChangeLogSet" => EmptyChangeSet);
changesetlist_with_common_fields_and_impl!(#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct GitChangeSetList {});
register_class!("hudson.plugins.git.GitChangeSetList" => GitChangeSetList);
changesetlist_with_common_fields_and_impl!(#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct RepoChangeLogSet {});
register_class!("hudson.plugins.repo.RepoChangeLogSet" => RepoChangeLogSet);
changesetlist_with_common_fields_and_impl!(#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct FilteredChangeLogSet {});
register_class!("hudson.maven.FilteredChangeLogSet" => FilteredChangeLogSet);
pub trait ChangeSet {}
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct CommonChangeSet {
#[serde(rename = "_class")]
pub class: Option<String>,
#[serde(flatten)]
other_fields: serde_json::Value,
}
specialize!(CommonChangeSet => ChangeSet);
impl ChangeSet for CommonChangeSet {}
#[derive(Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct GitChangeSet {
pub comment: String,
pub author_email: String,
pub commit_id: String,
pub date: String,
pub msg: String,
pub timestamp: u64,
pub id: String,
pub affected_paths: Vec<String>,
pub author: ShortUser,
pub paths: Vec<PathChange>,
}
register_class!("hudson.plugins.git.GitChangeSet" => GitChangeSet);
impl ChangeSet for GitChangeSet {}
#[derive(Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct ChangeLogEntry {
pub commit_id: Option<String>,
pub msg: String,
pub timestamp: i64,
pub affected_paths: Option<Vec<String>>,
pub author: ShortUser,
}
register_class!("hudson.plugins.repo.ChangeLogEntry" => ChangeLogEntry);
impl ChangeSet for ChangeLogEntry {}
#[derive(Debug, Deserialize, Clone, Copy)]
#[serde(rename_all = "lowercase")]
pub enum EditType {
Add,
Edit,
Delete,
}
#[derive(Debug, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct PathChange {
pub file: String,
pub edit_type: EditType,
}