material_yew/list/
list_index.rs1use std::collections::HashSet;
2use wasm_bindgen::{JsCast, JsValue};
3
4#[derive(Debug)]
8pub enum ListIndex {
9 Single(Option<usize>),
13 Multi(HashSet<usize>),
15}
16
17impl From<JsValue> for ListIndex {
18 fn from(val: JsValue) -> Self {
19 if let Ok(set) = val.clone().dyn_into::<js_sys::Set>() {
20 let indices = set
21 .values()
22 .into_iter()
23 .filter_map(|item| item.ok())
24 .filter_map(|value| value.as_f64())
25 .map(|num| num as usize)
26 .collect();
27 ListIndex::Multi(indices)
28 } else if let Some(value) = val.as_f64() {
29 #[allow(clippy::float_cmp)]
30 ListIndex::Single(if value != -1.0 {
31 Some(value as usize)
32 } else {
33 None
34 })
35 } else {
36 panic!("This should never happen")
37 }
38 }
39}