use super::{PercentEncoded, truncate_spaces};
use crate::network::responses::*;
use bytesize::ByteSize;
const LARGE: ByteSize = ByteSize::mb(40);
pub fn file_link(repo: &Repo, branch_name: Option<&PercentEncoded>, file: &Item) -> String {
let username_clean: String = truncate_spaces(&repo.owner.login);
let username_link = PercentEncoded::new(&username_clean);
let repo_link = PercentEncoded::new(&repo.name);
let file_name = file.name();
let file_path = file.path();
let size = match file {
Item::Submodule { .. } | Item::Symlink { .. } => String::new(),
Item::Dir { size, .. } if size.as_u64() == 0 => String::new(),
Item::Dir { size, .. } if *size > LARGE => format!(" → {}", size.display().si()),
Item::File { size, .. } if *size > LARGE => {
format!(" → {}", size.display().si())
}
_ => String::new(),
};
let path = PercentEncoded::new(file_path);
let branch_name = match branch_name {
Some(branch) => branch,
None => &PercentEncoded::new(&repo.default_branch),
};
let icon: &str = match file {
Item::Submodule { .. } => "→", Item::Symlink { .. } => "↳", Item::Dir { .. } => "📁", Item::File { .. } => "📄", };
return format!(
"=> /{}/{}/src/branch/{}/{} {icon} {file_name}{size}",
username_link.uri_component(),
repo_link.uri_component(),
branch_name.uri_component(),
path.uri_component_retaining_sep()
);
}