vscodehelper 0.2.0

Understanding the data that VSCode writes to disk
Documentation
use diesel::prelude::*;
use serde::Deserialize;

use super::keys::Key;

#[derive(Queryable, Selectable, Debug)]
#[diesel(table_name = crate::state_vscdb::schema::ItemTable)]
#[diesel(check_for_backend(diesel::sqlite::Sqlite))]
pub struct Item {
    pub key: String,
    pub value: Vec<u8>,
}
impl Item {
    pub fn parse<K: Key>(&self) -> eyre::Result<K::Value> {
        if self.key != K::KEY {
            return Err(eyre::eyre!(
                "Key mismatch: expected {}, found {}",
                K::KEY,
                self.key
            ));
        }
        let value = serde_json::from_slice(&self.value)?;
        Ok(value)
    }
    pub fn value_as_string(&self) -> eyre::Result<String> {
        let value = String::from_utf8(self.value.clone())?;
        Ok(value)
    }
}

#[derive(Deserialize, Debug)]
pub struct RecentlyOpenedPathsList {
    pub entries: Vec<RecentlyOpenedEntry>,
}

#[derive(Deserialize, Debug)]
pub struct RecentlyOpenedEntry {
    #[serde(rename = "fileUri")]
    pub file_uri: Option<String>,
    #[serde(rename = "folderUri")]
    pub folder_uri: Option<String>,
    pub label: Option<String>,
}