use crate::config::{lists::ListTactic, user_opts::ImportsOptions, whitespace::IndentStyle};
use serde::{Deserialize, Serialize};
#[derive(Debug, Copy, Clone)]
pub struct Imports {
pub group_imports: GroupImports,
pub imports_granularity: ImportGranularity,
pub imports_indent: IndentStyle,
pub imports_layout: ListTactic,
}
impl Default for Imports {
fn default() -> Self {
Self {
group_imports: GroupImports::Preserve,
imports_granularity: ImportGranularity::Preserve,
imports_indent: IndentStyle::Block,
imports_layout: ListTactic::Mixed,
}
}
}
impl Imports {
pub fn from_opts(opts: &ImportsOptions) -> Self {
let default = Self::default();
Self {
group_imports: opts.group_imports.unwrap_or(default.group_imports),
imports_granularity: opts
.imports_granularity
.unwrap_or(default.imports_granularity),
imports_indent: opts.imports_indent.unwrap_or(default.imports_indent),
imports_layout: opts.imports_layout.unwrap_or(default.imports_layout),
}
}
}
#[derive(Serialize, Deserialize, Debug, Copy, Clone)]
pub enum GroupImports {
Preserve,
StdExternalCrate,
One,
}
#[derive(Serialize, Deserialize, Debug, Copy, Clone)]
pub enum ImportGranularity {
Preserve,
Crate,
Module,
Item,
One,
}