use crate::cli::output_sink::{OutputSink, TerminalSink};
use crate::core::manifest::Manifest;
use crate::git::backend::GitBackend;
use crate::git::git2_backend::Git2Backend;
use std::path::{Path, PathBuf};
use std::sync::Arc;
pub struct WorkspaceContext {
pub workspace_root: PathBuf,
pub manifest: Manifest,
pub quiet: bool,
pub verbose: bool,
pub json: bool,
pub sink: Arc<dyn OutputSink>,
pub git_backend: Arc<dyn GitBackend>,
}
impl WorkspaceContext {
pub fn root(&self) -> &Path {
&self.workspace_root
}
pub fn new(
workspace_root: PathBuf,
manifest: Manifest,
quiet: bool,
verbose: bool,
json: bool,
) -> Self {
Self {
workspace_root,
manifest,
quiet,
verbose,
json,
sink: Arc::new(TerminalSink::new(quiet, json)),
git_backend: Arc::new(Git2Backend),
}
}
}