foch 0.0.1

EU4 mod analysis and merge toolkit
Documentation
use crate::model::SymbolKind;
use std::path::PathBuf;

#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum GraphModeSelection {
	Calls,
	Semantic,
}

#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum GraphScopeSelection {
	Input,
	Base,
	Mods,
	All,
}

#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum GraphArtifactFormat {
	Json,
	Dot,
	Both,
}

#[derive(Clone, Debug)]
pub struct GraphBuildOptions {
	pub include_game_base: bool,
	pub mode: GraphModeSelection,
	pub scope: GraphScopeSelection,
	pub format: GraphArtifactFormat,
	pub root: Option<GraphRootSelector>,
	pub family: Option<String>,
	pub definition_kinds: Vec<SymbolKind>,
}

impl Default for GraphBuildOptions {
	fn default() -> Self {
		Self {
			include_game_base: true,
			mode: GraphModeSelection::Calls,
			scope: GraphScopeSelection::All,
			format: GraphArtifactFormat::Both,
			root: None,
			family: None,
			definition_kinds: Vec::new(),
		}
	}
}

#[derive(Clone, Debug)]
pub struct GraphRootSelector {
	pub kind: SymbolKind,
	pub name: String,
}

#[derive(Clone, Debug, Default)]
pub struct GraphBuildSummary {
	pub out_dir: PathBuf,
	pub input_written: bool,
	pub base_written: bool,
	pub mod_count: usize,
	pub tree_written: bool,
	pub semantic_written: bool,
}