Skip to content

Commit 9de96e2

Browse files
Fogapodx86y
authored andcommitted
include logos into binary
1 parent fc572d1 commit 9de96e2

File tree

7 files changed

+70
-14
lines changed

7 files changed

+70
-14
lines changed

Cargo.lock

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,17 @@ ngnk = { version = "*", optional = true }
2222
meval = { version = "0.2.0", optional = true }
2323
plotters = "0.3.5"
2424
plotters-iced = "0.10.0"
25+
phf = "0.11.1"
2526

2627
[features]
2728
default = ["calculator_meval"]
2829

2930
calculator_k = ["dep:ngnk"]
3031
calculator_meval = ["dep:meval"]
3132

33+
[build-dependencies]
34+
phf_codegen = "0.11.1"
35+
3236
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
3337
directories-next = "2.0"
3438
[target.'cfg(target_arch = "wasm32")'.dependencies]

build.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
use std::{
2+
env,
3+
fs::{self, File},
4+
io::{BufWriter, Write},
5+
path::Path,
6+
};
7+
fn main() {
8+
let path = Path::new(&env::var("OUT_DIR").unwrap()).join("svg_logos.rs");
9+
let mut file = BufWriter::new(File::create(path).unwrap());
10+
11+
let mut map = phf_codegen::Map::new();
12+
13+
for entry in fs::read_dir(concat!(env!("CARGO_MANIFEST_DIR"), "/assets/logos/")).unwrap() {
14+
let entry = entry.unwrap();
15+
let file_name = entry.file_name();
16+
let file_name = file_name.to_string_lossy();
17+
18+
let Some(name) = file_name.strip_suffix(".svg") else {
19+
panic!("expected .svg file, got {file_name}");
20+
};
21+
22+
map.entry(
23+
name.to_uppercase(),
24+
&format!(r#"include_bytes!("{}")"#, entry.path().display()),
25+
);
26+
}
27+
28+
write!(
29+
&mut file,
30+
"pub(crate) static LOGOS: phf::Map<&'static str, &'static [u8]> = {}",
31+
map.build()
32+
)
33+
.unwrap();
34+
writeln!(&mut file, ";").unwrap();
35+
}

src/app.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use crate::api;
22
use crate::config::Config;
33
use crate::message::Message;
44
use crate::message::Screen;
5+
use crate::svg_logos;
56
use crate::views::panes::balances::balances_view;
67
use crate::views::panes::book::book_view;
78
use crate::views::panes::calculator::CalculatorMessage;
@@ -564,12 +565,12 @@ impl Application for App {
564565
.iter()
565566
.map(|t| {
566567
let price_now = self.data.prices.get(t).unwrap_or(&0.0);
567-
let ticker = t.strip_suffix("USDT").unwrap_or(t).to_lowercase();
568-
let handle = svg::Handle::from_path(format!(
569-
"{}/assets/logos/{}.svg",
570-
env!("CARGO_MANIFEST_DIR"),
571-
ticker
572-
));
568+
let ticker = t.strip_suffix("USDT").unwrap_or(t);
569+
let handle = match svg_logos::LOGOS.get(ticker) {
570+
Some(bytes) => svg::Handle::from_memory(*bytes),
571+
// this silently fails
572+
None => svg::Handle::from_path("NONEXISTENT"),
573+
};
573574

574575
let svg = svg(handle)
575576
.width(Length::Fixed(16.0))

src/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ mod api;
22
mod app;
33
mod config;
44
mod message;
5+
mod svg_logos;
56
mod theme;
67
mod views;
78
mod ws;

src/svg_logos.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
include!(concat!(env!("OUT_DIR"), "/svg_logos.rs"));

src/views/panes/balances.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
use crate::theme::h2c;
2-
use crate::views::components::unstyled_btn::UnstyledBtn;
3-
use crate::views::panes::Message;
1+
use crate::{
2+
svg_logos,
3+
theme::h2c,
4+
views::{components::unstyled_btn::UnstyledBtn, panes::Message},
5+
};
46

57
use binance::rest_model::Balance;
68
use iced::{
@@ -15,11 +17,11 @@ pub fn balances_view<'a>(bs: &[Balance]) -> Element<'a, Message> {
1517
.map(|b| {
1618
let asset = &b.asset;
1719
let ticker = asset.strip_suffix("USDT").unwrap_or(asset).to_lowercase();
18-
let handle = svg::Handle::from_path(format!(
19-
"{}/assets/logos/{}.svg",
20-
env!("CARGO_MANIFEST_DIR"),
21-
ticker
22-
));
20+
let handle = match svg_logos::LOGOS.get(&ticker) {
21+
Some(bytes) => svg::Handle::from_memory(*bytes),
22+
// this silently fails
23+
None => svg::Handle::from_path("NONEXISTENT"),
24+
};
2325

2426
let svg = svg(handle)
2527
.width(Length::Fixed(16.0))

0 commit comments

Comments
 (0)