summaryrefslogtreecommitdiffstats
path: root/examples/pokedex
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-02-05 04:15:45 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-02-05 04:15:45 +0100
commit9df3fb13c7b0372f64ff7bd9073769833689de5b (patch)
tree97906f18b796d7cbf6d6d12cf703e75602f2ae90 /examples/pokedex
parentca213922d043a5532d9ab352c0d54bfca7563871 (diff)
downloadiced-9df3fb13c7b0372f64ff7bd9073769833689de5b.tar.gz
iced-9df3fb13c7b0372f64ff7bd9073769833689de5b.tar.bz2
iced-9df3fb13c7b0372f64ff7bd9073769833689de5b.zip
Make `pokedex` example work on Wasm
Diffstat (limited to 'examples/pokedex')
-rw-r--r--examples/pokedex/Cargo.toml9
-rw-r--r--examples/pokedex/src/main.rs39
2 files changed, 37 insertions, 11 deletions
diff --git a/examples/pokedex/Cargo.toml b/examples/pokedex/Cargo.toml
index b96eda91..f8668be0 100644
--- a/examples/pokedex/Cargo.toml
+++ b/examples/pokedex/Cargo.toml
@@ -8,7 +8,12 @@ publish = false
[dependencies]
iced = { path = "../..", features = ["image", "debug"] }
iced_futures = { path = "../../futures", features = ["tokio"] }
-reqwest = { version = "0.10", features = ["json"] }
-rand = "0.7"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
+rand = { version = "0.7", features = ["wasm-bindgen"] }
+
+[dependencies.reqwest]
+version = "0.10"
+git = "https://github.com/hecrj/reqwest.git"
+branch = "feature/wasm-deserialize-json"
+features = ["json"]
diff --git a/examples/pokedex/src/main.rs b/examples/pokedex/src/main.rs
index 3c00d628..13e420a9 100644
--- a/examples/pokedex/src/main.rs
+++ b/examples/pokedex/src/main.rs
@@ -27,7 +27,12 @@ enum Message {
}
impl Application for Pokedex {
+ #[cfg(not(target_arch = "wasm32"))]
type Executor = iced_futures::executor::Tokio;
+
+ #[cfg(target_arch = "wasm32")]
+ type Executor = iced_futures::executor::WasmBindgen;
+
type Message = Message;
fn new() -> (Pokedex, Command<Message>) {
@@ -166,19 +171,21 @@ impl Pokemon {
}
let id = {
- let mut rng = rand::thread_rng();
+ let mut rng = rand::rngs::OsRng::default();
rng.gen_range(0, Pokemon::TOTAL)
};
- let url = format!("https://pokeapi.co/api/v2/pokemon-species/{}", id);
- let sprite = format!("https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/{}.png", id);
+ let fetch_entry = async {
+ let url =
+ format!("https://pokeapi.co/api/v2/pokemon-species/{}", id);
- let (entry, sprite): (Entry, _) = futures::future::try_join(
- reqwest::get(&url).await?.json(),
- reqwest::get(&sprite).await?.bytes(),
- )
- .await?;
+ reqwest::get(&url).await?.json().await
+ };
+
+ let (entry, image): (Entry, _) =
+ futures::future::try_join(fetch_entry, Self::fetch_image(id))
+ .await?;
let description = entry
.flavor_text_entries
@@ -195,9 +202,23 @@ impl Pokemon {
.chars()
.map(|c| if c.is_control() { ' ' } else { c })
.collect(),
- image: image::Handle::from_memory(sprite.as_ref().to_vec()),
+ image,
})
}
+
+ async fn fetch_image(id: u16) -> Result<image::Handle, reqwest::Error> {
+ let url = format!("https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/{}.png", id);
+
+ #[cfg(not(target_arch = "wasm32"))]
+ {
+ let bytes = reqwest::get(&url).await?.bytes().await?;
+
+ Ok(image::Handle::from_memory(bytes.as_ref().to_vec()))
+ }
+
+ #[cfg(target_arch = "wasm32")]
+ Ok(image::Handle::from_path(url))
+ }
}
#[derive(Debug, Clone)]