pub struct ConfigResolver { /* private fields */ }Expand description
Manages loading and merging of all configuration layers.
Resolution order: System → User → Project → Session Higher precedence layers override lower precedence layers.
Implementations§
Source§impl ConfigResolver
impl ConfigResolver
Sourcepub fn new(dir_context: DirectoryContext, working_dir: PathBuf) -> Self
pub fn new(dir_context: DirectoryContext, working_dir: PathBuf) -> Self
Create a new ConfigResolver for a working directory.
Sourcepub fn resolve(&self) -> Result<Config, ConfigError>
pub fn resolve(&self) -> Result<Config, ConfigError>
Load all layers and merge them into a resolved Config.
Layers are merged from highest to lowest precedence: Session > Project > UserPlatform > User > System
Each layer fills in values missing from higher precedence layers.
Sourcepub fn user_config_path(&self) -> PathBuf
pub fn user_config_path(&self) -> PathBuf
Get the path to user config file.
Sourcepub fn project_config_path(&self) -> PathBuf
pub fn project_config_path(&self) -> PathBuf
Get the path to project config file. Checks new location first (.fresh/config.json), falls back to legacy (config.json).
Sourcepub fn project_config_write_path(&self) -> PathBuf
pub fn project_config_write_path(&self) -> PathBuf
Get the preferred path for writing project config (new location).
Sourcepub fn session_config_path(&self) -> PathBuf
pub fn session_config_path(&self) -> PathBuf
Get the path to session config file.
Sourcepub fn user_platform_config_path(&self) -> Option<PathBuf>
pub fn user_platform_config_path(&self) -> Option<PathBuf>
Get the path to platform-specific user config file.
Sourcepub fn load_user_layer(&self) -> Result<Option<PartialConfig>, ConfigError>
pub fn load_user_layer(&self) -> Result<Option<PartialConfig>, ConfigError>
Load the user layer from disk.
Sourcepub fn load_user_platform_layer(
&self,
) -> Result<Option<PartialConfig>, ConfigError>
pub fn load_user_platform_layer( &self, ) -> Result<Option<PartialConfig>, ConfigError>
Load the platform-specific user layer from disk.
Sourcepub fn load_project_layer(&self) -> Result<Option<PartialConfig>, ConfigError>
pub fn load_project_layer(&self) -> Result<Option<PartialConfig>, ConfigError>
Load the project layer from disk.
Sourcepub fn load_session_layer(&self) -> Result<Option<PartialConfig>, ConfigError>
pub fn load_session_layer(&self) -> Result<Option<PartialConfig>, ConfigError>
Load the session layer from disk.
Sourcepub fn save_to_layer(
&self,
config: &Config,
layer: ConfigLayer,
) -> Result<(), ConfigError>
pub fn save_to_layer( &self, config: &Config, layer: ConfigLayer, ) -> Result<(), ConfigError>
Save a config to a specific layer, writing only the delta from parent layers.
Sourcepub fn save_to_layer_with_baseline(
&self,
current: &Config,
baseline: &Config,
layer: ConfigLayer,
) -> Result<(), ConfigError>
pub fn save_to_layer_with_baseline( &self, current: &Config, baseline: &Config, layer: ConfigLayer, ) -> Result<(), ConfigError>
Save a config to a specific layer, using a baseline to track changes.
This solves the problem where save_to_layer can’t distinguish between:
- “User didn’t change this field” (should preserve external edits)
- “User changed this field to the default” (should update the file)
By comparing current against baseline (what was loaded), we know exactly
which fields the user modified. Those fields are updated even if they match
defaults; untouched fields preserve any external edits to the file.
Sourcepub fn save_changes_to_layer(
&self,
changes: &HashMap<String, Value>,
deletions: &HashSet<String>,
layer: ConfigLayer,
) -> Result<(), ConfigError>
pub fn save_changes_to_layer( &self, changes: &HashMap<String, Value>, deletions: &HashSet<String>, layer: ConfigLayer, ) -> Result<(), ConfigError>
Save specific changes to a layer file using JSON pointer paths.
This reads the existing file, applies only the specified changes, and writes back. This preserves any manual edits not touched by the changes.
Sourcepub fn save_session(&self, session: &SessionConfig) -> Result<(), ConfigError>
pub fn save_session(&self, session: &SessionConfig) -> Result<(), ConfigError>
Save a SessionConfig to the session layer file.
Sourcepub fn load_session(&self) -> Result<SessionConfig, ConfigError>
pub fn load_session(&self) -> Result<SessionConfig, ConfigError>
Load the session config from disk, or return an empty one if it doesn’t exist.
Sourcepub fn clear_session(&self) -> Result<(), ConfigError>
pub fn clear_session(&self) -> Result<(), ConfigError>
Clear the session config file on editor exit.
Sourcepub fn get_layer_sources(
&self,
) -> Result<HashMap<String, ConfigLayer>, ConfigError>
pub fn get_layer_sources( &self, ) -> Result<HashMap<String, ConfigLayer>, ConfigError>
Determine which layer each setting value comes from. Returns a map of JSON pointer paths to their source layer.
Auto Trait Implementations§
impl Freeze for ConfigResolver
impl RefUnwindSafe for ConfigResolver
impl Send for ConfigResolver
impl Sync for ConfigResolver
impl Unpin for ConfigResolver
impl UnsafeUnpin for ConfigResolver
impl UnwindSafe for ConfigResolver
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more