vscodehelper 0.2.0

Understanding the data that VSCode writes to disk
Documentation
pub mod keys;
pub mod models;
pub mod schema;

use crate::state_vscdb::schema::ItemTable::dsl::*;
use crate::storage_json::paths::VSCodePath;
use diesel::SqliteConnection;
use diesel::prelude::*;
use keys::Key;
use models::Item;
use std::path::PathBuf;

pub struct VSCodeStateVscdb {
    pub connection: SqliteConnection,
}
impl VSCodeStateVscdb {
    pub fn new(connection: SqliteConnection) -> Self {
        Self { connection }
    }
    pub fn try_default() -> eyre::Result<Self> {
        let vscdb_path: PathBuf = VSCodePath::StateVscdb.try_into()?;
        let connection = SqliteConnection::establish(&vscdb_path.to_string_lossy())?;
        Ok(Self { connection })
    }
    pub fn keys(&mut self) -> eyre::Result<Vec<String>> {
        let keys = ItemTable
            .select(key)
            .distinct()
            .load::<String>(&mut self.connection)?;
        Ok(keys)
    }
    pub fn entries(&mut self) -> eyre::Result<Vec<Item>> {
        let entries = ItemTable
            .select(Item::as_select())
            .load::<Item>(&mut self.connection)?;
        Ok(entries)
    }
    pub fn read<K: Key>(&mut self) -> eyre::Result<K::Value> {
        let item = ItemTable
            .filter(key.eq(K::KEY))
            .select(Item::as_select())
            .first::<Item>(&mut self.connection)?;
        let rtn = item.parse::<K>()?;
        Ok(rtn)
    }
}

pub mod well_known_keys {
    pub use super::keys::history_recently_opened_paths_list::HistoryRecentlyOpenedPathsListKey;
}