feat: use rust to ship metadata directly

This commit is contained in:
Himadri Bhattacharjee
2025-12-23 12:20:07 +05:30
parent b4b1524830
commit 2c337c68a3
5 changed files with 5166 additions and 35879 deletions

79
Cargo.lock generated
View File

@@ -2163,8 +2163,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1706dc14a2e140dec0a7a07109d9a3d5890b81e85bd6c60b906b249a77adf0ca"
dependencies = [
"mime",
"phf",
"phf_shared",
"phf 0.11.3",
"phf_shared 0.11.3",
"unicase",
]
@@ -2780,8 +2780,19 @@ version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
dependencies = [
"phf_macros",
"phf_shared",
"phf_macros 0.11.3",
"phf_shared 0.11.3",
]
[[package]]
name = "phf"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf"
dependencies = [
"phf_macros 0.13.1",
"phf_shared 0.13.1",
"serde",
]
[[package]]
@@ -2790,24 +2801,47 @@ version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
dependencies = [
"phf_shared",
"phf_shared 0.11.3",
"rand 0.8.5",
]
[[package]]
name = "phf_generator"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737"
dependencies = [
"fastrand",
"phf_shared 0.13.1",
]
[[package]]
name = "phf_macros"
version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216"
dependencies = [
"phf_generator",
"phf_shared",
"phf_generator 0.11.3",
"phf_shared 0.11.3",
"proc-macro2",
"quote",
"syn",
"unicase",
]
[[package]]
name = "phf_macros"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef"
dependencies = [
"phf_generator 0.13.1",
"phf_shared 0.13.1",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "phf_shared"
version = "0.11.3"
@@ -2818,6 +2852,15 @@ dependencies = [
"unicase",
]
[[package]]
name = "phf_shared"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266"
dependencies = [
"siphasher",
]
[[package]]
name = "pin-project"
version = "1.1.10"
@@ -3322,12 +3365,6 @@ version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
[[package]]
name = "ryu"
version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62049b2877bf12821e8f9ad256ee38fdc31db7387ec2d3b3f403024de2034aea"
[[package]]
name = "same-file"
version = "1.0.6"
@@ -3392,19 +3429,6 @@ dependencies = [
"syn",
]
[[package]]
name = "serde_json"
version = "1.0.146"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "217ca874ae0207aac254aa02c957ded05585a90892cc8d87f9e5fa49669dadd8"
dependencies = [
"itoa",
"memchr",
"ryu",
"serde",
"serde_core",
]
[[package]]
name = "serde_repr"
version = "0.1.20"
@@ -5205,9 +5229,8 @@ dependencies = [
"egui_alignments",
"egui_extras",
"env_logger",
"phf 0.13.1",
"rusb",
"serde",
"serde_json",
]
[[package]]

View File

@@ -10,6 +10,5 @@ egui = "0.33.2"
egui_alignments = "0.3.6"
egui_extras = "0.33.2"
env_logger = "0.11.8"
phf = { version = "0.13.1", features = ["macros"] }
rusb = "0.9.4"
serde = { version = "1.0.228", features = ["serde_derive"] }
serde_json = "1.0.146"

View File

@@ -15,7 +15,7 @@ use egui::{
TopBottomPanel, text::LayoutJob,
};
use egui_alignments::{center_horizontal, column};
use serde::Deserialize;
mod metadata;
const WORKER_THREAD_POLL: Duration = Duration::from_secs(5);
const LABEL_EXTRACTOR: &[u8; 2124] = include_bytes!("./extractor.dex");
@@ -37,7 +37,6 @@ struct App {
have_device: bool,
busy: bool,
metadata: BTreeMap<String, Metadata>,
}
type PackageIdentifier = String;
@@ -55,7 +54,7 @@ struct Entry {
expand_triggered: bool,
enabled: bool,
selected: bool,
description: String,
metadata: Option<&'static Metadata>,
}
struct PackageDiff {
@@ -73,11 +72,10 @@ pub enum ShellRunError {
RevertFailed(PackageIdentifier),
}
#[derive(Deserialize)]
#[derive(Debug)]
pub struct Metadata {
// list: String,
description: String,
removal: String,
description: &'static str,
removal: &'static str,
}
mod categories {
@@ -110,8 +108,6 @@ fn main() -> eframe::Result {
..Default::default()
};
let metadata: BTreeMap<String, Metadata> = serde_json::from_str(include_str!("metadata.json"))
.map_err(|e| eframe::Error::AppCreation(Box::new(e)))?;
eframe::run_native(
"Zilch",
options,
@@ -145,7 +141,6 @@ fn main() -> eframe::Result {
action_tx,
categories: categories::RECOMMENDED,
action_done_rx,
metadata,
}))
}),
)
@@ -262,14 +257,12 @@ impl eframe::App for App {
self.have_device = true;
for package in package_diff.added {
let maybe_meta = self.metadata.get(&package.id);
let maybe_meta = metadata::STORE.get(&package.id);
self.entries.insert(
package.id.clone(),
Entry {
package,
description: maybe_meta
.map(|s| s.description.to_string())
.unwrap_or("Description unavailable.".to_string()),
metadata: maybe_meta,
expand_triggered: false,
enabled: true,
selected: false,
@@ -540,7 +533,10 @@ fn render_entry(ui: &mut egui::Ui, entry: &mut Entry) {
let header_res = ui.horizontal(|ui| {
ui.style_mut().spacing.button_padding = egui::vec2(20.0, 10.0);
ui.with_layout(Layout::top_down_justified(egui::Align::LEFT), |ui| {
let response = ui.add(create_button(entry));
let response = ui.add(
create_button(entry)
.right_text(entry.metadata.map(|m| m.removal).unwrap_or("Unidentified")),
);
let id = ui.make_persistent_id(format!("{}_interact", entry.package.id));
if ui
.interact(response.rect, id, Sense::click())
@@ -556,7 +552,15 @@ fn render_entry(ui: &mut egui::Ui, entry: &mut Entry) {
state.show_body_indented(&header_res.response, ui, |ui| {
ui.add_space(4.0);
ui.label(RichText::new(&entry.description).size(12.0));
ui.label(
RichText::new(
entry
.metadata
.map(|m| m.description)
.unwrap_or("Description unavailable."),
)
.size(12.0),
);
ui.add_space(4.0);
});
}

File diff suppressed because it is too large Load Diff

5094
src/metadata.rs Normal file

File diff suppressed because it is too large Load Diff