quinjet 0.0.50

A fast, live, keyboard-first Git source-control interface for the terminal
use crate::date_time::{format_local_timestamp, format_relative_timestamp};
use crate::git::diff::{DiffDocument, DiffLineKind};
use crate::git::github::{
    CheckRunLog, CheckStep, ConversationKind, GitHubRepository, PullRequest, PullRequestCheck,
    PullRequestCheckStatus, PullRequestConversation, PullRequestDiffIndex, PullRequestFileStatus,
    PullRequestReviewSide, PullRequestReviewSnapshot, PullRequestReviewThreadSubject, unix_now,
};
use crate::git::history::Commit;
use crate::git::status::{ChangeArea, RepoStatus};
use crate::git::{Branch, HistoryBranch, ProjectGroup, Stash, Worktree};

#[derive(Default)]
struct Report(String);

impl Report {
    fn line(&mut self, text: &str) {
        self.0.push_str(text);
        self.0.push('\n');
    }

    fn blank(&mut self) {
        self.0.push('\n');
    }

    const fn empty(&self) -> bool {
        self.0.is_empty()
    }

    fn finish(self) -> String {
        self.0
    }
}

fn truncate(text: &str, width: usize) -> String {
    if text.chars().count() <= width {
        return text.to_owned();
    }
    let kept: String = text.chars().take(width.saturating_sub(1)).collect();
    format!("{kept}")
}

mod github;
mod repository;

pub(crate) use github::*;
pub(crate) use repository::*;

#[cfg(test)]
mod tests;