eye_config 0.5.1

A configuration persistence library and CLI tool.
Documentation
use crate::cli::config::known_projects::KnownProjectEntry;
use crate::cli::config::known_projects::KnownProjects;
use crate::cli::global_args::GlobalArgs;
use crate::persistable_state::PersistableState;
use clap::Parser;
use std::collections::HashMap;
use std::iter::once;

#[derive(Debug, Parser)]
pub struct ListCommand {}

impl ListCommand {
    pub async fn handle(self, global_args: GlobalArgs) -> eyre::Result<()> {
        let _ = global_args;
        let known_projects = KnownProjects::load().await?;
        let display = serde_json::to_string_pretty(
            &known_projects
                .entries
                .into_iter()
                .chain(once(KnownProjectEntry {
                    key: KnownProjects::key().await?,
                    last_accessed: chrono::Local::now(),
                }))
                .map(|entry| Ok((entry.key.file_path()?.display().to_string(), entry)))
                .collect::<eyre::Result<HashMap<_, _>>>()?,
        )?;
        println!("{display}");
        Ok(())
    }
}