use std::sync::Arc;
use crate::api::ReqwestTransport;
use crate::core::{Context, IoStreams, RepoId, Transport};
use crate::git::ShellGit;
use anyhow::Result;
use crate::browser::SystemBrowser;
use crate::prompt::InquirePrompter;
#[must_use]
pub fn user_agent() -> String {
format!("bb-cli/{}", env!("CARGO_PKG_VERSION"))
}
pub fn build_context(repo_override: Option<RepoId>) -> Result<Context> {
let io = Arc::new(IoStreams::system());
let config = crate::config::load()?;
let inner: Arc<dyn Transport> = Arc::new(ReqwestTransport::new(&user_agent())?);
let transport = Arc::new(crate::refresh::RefreshingTransport::new(
inner,
config.clone(),
));
let git = Arc::new(ShellGit::system());
let prompter = Arc::new(InquirePrompter);
let browser = Arc::new(SystemBrowser);
Ok(Context {
io,
prompter,
browser,
git,
config,
transport,
app_version: env!("CARGO_PKG_VERSION").to_owned(),
repo_override,
})
}