1use std::fmt::Display;
2use std::ops::Deref;
3
4use color_eyre::owo_colors::OwoColorize as _;
5use ytil_git::branch::Branch;
6
7struct RenderableBranch(pub Branch);
12
13impl Deref for RenderableBranch {
14 type Target = Branch;
15
16 fn deref(&self) -> &Self::Target {
17 &self.0
18 }
19}
20
21impl Display for RenderableBranch {
22 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
23 let styled_date_time = format!("({})", self.committer_date_time());
24 write!(f, "{} {}", self.name(), styled_date_time.blue())
25 }
26}
27
28pub fn select() -> color_eyre::Result<Option<Branch>> {
34 let branches = ytil_git::branch::get_all_no_redundant()?;
35
36 let Some(branch) = crate::minimal_select(branches.into_iter().map(RenderableBranch).collect())? else {
37 return Ok(None);
38 };
39
40 Ok(Some(branch.0))
41}