use serde::Deserialize;
#[derive(Debug, Deserialize)]
pub struct BbPaged<T> {
#[serde(default = "Vec::new")]
pub values: Vec<T>,
#[serde(default)]
pub next: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct BbPullRequest {
pub id: u64,
pub title: String,
pub state: String,
pub created_on: String,
#[serde(default)]
pub updated_on: Option<String>,
#[serde(default)]
pub author: Option<BbAuthor>,
#[serde(default)]
pub merge_commit: Option<BbCommitRef>,
}
#[derive(Debug, Deserialize)]
pub struct BbAuthor {
#[serde(default)]
pub display_name: Option<String>,
#[serde(default)]
pub nickname: Option<String>,
#[serde(default)]
pub uuid: Option<String>,
}
impl BbAuthor {
pub fn best_name(&self) -> String {
let pick = |o: &Option<String>| {
o.as_ref()
.map(|s| s.trim())
.filter(|s| !s.is_empty())
.map(|s| s.to_string())
};
pick(&self.nickname)
.or_else(|| pick(&self.display_name))
.or_else(|| pick(&self.uuid))
.unwrap_or_default()
}
}
#[derive(Debug, Deserialize)]
pub struct BbCommitRef {
pub hash: String,
}