sync
This commit is contained in:
parent
46b4e57eae
commit
7e536a562a
9
Cargo.lock
generated
9
Cargo.lock
generated
@ -506,6 +506,7 @@ dependencies = [
|
||||
"glue",
|
||||
"gtk4",
|
||||
"image",
|
||||
"indexmap",
|
||||
"lazy_static",
|
||||
"libadwaita",
|
||||
"libloading 0.8.0",
|
||||
@ -1785,9 +1786,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.14.0"
|
||||
version = "0.14.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
|
||||
checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
|
||||
|
||||
[[package]]
|
||||
name = "heapless"
|
||||
@ -1894,9 +1895,9 @@ checksum = "b2cf49df1085dcfb171460e4592597b84abe50d900fb83efb6e41b20fefd6c2c"
|
||||
|
||||
[[package]]
|
||||
name = "indexmap"
|
||||
version = "2.0.0"
|
||||
version = "2.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
|
||||
checksum = "824b2ae422412366ba479e8111fd301f7b5faece8149317bb81925979a53f520"
|
||||
dependencies = [
|
||||
"equivalent",
|
||||
"hashbrown",
|
||||
|
||||
@ -85,6 +85,7 @@ futures = "0.3.30"
|
||||
sorted-vec = "0.8.3"
|
||||
tracing = "0.1.40"
|
||||
tracing-subscriber = "0.3.18"
|
||||
indexmap = "2.2.2"
|
||||
|
||||
|
||||
[build-dependencies]
|
||||
|
||||
@ -39,6 +39,10 @@ impl Plugin for ETWSLoader {
|
||||
.into_iter()
|
||||
.map(|b| {
|
||||
let (dimension_len, data) = match b.data {
|
||||
ValueResult::I16(data) => (
|
||||
data.len(),
|
||||
radarg_plugin_interface::VecResult::I16(RVec::from(data)),
|
||||
),
|
||||
ValueResult::F32(data) => (
|
||||
data.len(),
|
||||
radarg_plugin_interface::VecResult::F32(RVec::from(data)),
|
||||
@ -91,6 +95,8 @@ impl Plugin for ETWSLoader {
|
||||
|
||||
let data_type = match b.info.value_name.as_str() {
|
||||
"ET" => PluginResultType::ET,
|
||||
"VIL" => PluginResultType::VIL,
|
||||
"EB" => PluginResultType::EB,
|
||||
"DBZ" => PluginResultType::DBZ,
|
||||
"CR" => PluginResultType::DBZ,
|
||||
"R" => PluginResultType::R,
|
||||
@ -164,7 +170,7 @@ mod tests {
|
||||
|
||||
fn test() {
|
||||
let result =
|
||||
Record::parse_from_path("/Volumes/data2/RadarArray/HangZhou/radarData/OutputProducts/RadarProducts/BasicProductsX/20230822/20230822100400/ZJHZAA_20230822100400_CR.dat.gz")
|
||||
Record::parse_from_path("/Volumes/data2/RadarArray/HangZhou/radarData/OutputProducts/RadarProducts/BasicProductsX/20230624/20230624000800/ZJHZAA_20230624000800_VIL.dat.gz")
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
@ -18,6 +18,7 @@ pub enum ValueResult {
|
||||
F64(Vec<f64>),
|
||||
I32(Vec<i32>),
|
||||
F32(Vec<f32>),
|
||||
I16(Vec<i16>),
|
||||
U64(Vec<u64>),
|
||||
U32(Vec<u32>),
|
||||
I8(Vec<i8>),
|
||||
@ -31,6 +32,7 @@ enum ValueTypes {
|
||||
F32,
|
||||
U64,
|
||||
U32,
|
||||
I16,
|
||||
I8,
|
||||
U8,
|
||||
}
|
||||
@ -46,6 +48,49 @@ pub struct Record {
|
||||
pub blocks: Vec<ParsedBlock>, // Fill in generic types appropriately
|
||||
}
|
||||
|
||||
macro_rules! match_in_macro {
|
||||
($block:ident,$len:ident,$input:ident,$offset:ident,$scale:ident,$fill_value:ident,$(($branch:path, $t:ty, $bigger:ty,$raw_result:path, $bigger_result:path)),+) => {
|
||||
{
|
||||
use std::mem;
|
||||
let need_trans = $offset != 0.0 || $scale != 1.0;
|
||||
let trans_to_bigger = $offset.trunc() != $offset || $scale != 1.0;
|
||||
match $block {
|
||||
$(
|
||||
$branch => {
|
||||
let ratio = mem::size_of::<$t>() / mem::size_of::<u8>();
|
||||
let (input, result) = take($len * ratio)($input)?;
|
||||
let result = unsafe {
|
||||
let ptr = result.as_ptr() as *const $t;
|
||||
let slice = std::slice::from_raw_parts(ptr, $len);
|
||||
let slice = slice.to_vec();
|
||||
|
||||
if trans_to_bigger {
|
||||
let offset = $offset as $bigger;
|
||||
let scale = $scale as $bigger;
|
||||
$bigger_result(
|
||||
slice
|
||||
.into_iter()
|
||||
.map(|p| if (p as f64 - $fill_value).abs() < f64::EPSILON {p as $bigger} else {(p as $bigger - offset) / scale} )
|
||||
.collect::<Vec<$bigger>>(),
|
||||
)
|
||||
} else {
|
||||
$raw_result(if need_trans {
|
||||
let offset = $offset as $t;
|
||||
slice.into_iter().map(|p| if (p as f64 - $fill_value).abs() < f64::EPSILON {p} else {p - offset}).collect::<Vec<$t>>()
|
||||
} else {
|
||||
slice
|
||||
})
|
||||
}
|
||||
};
|
||||
Ok((input, result))
|
||||
},
|
||||
)+
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
impl Record {
|
||||
pub fn parse_from_path(path: impl AsRef<Path>) -> Result<Self, ETWSError> {
|
||||
let path = path.as_ref();
|
||||
@ -215,6 +260,19 @@ impl Record {
|
||||
Ok((input, hlen))
|
||||
}
|
||||
|
||||
fn _parse_type<'a>(type_str: &'a str) -> ValueTypes {
|
||||
match type_str {
|
||||
"b" => ValueTypes::I8,
|
||||
"B" => ValueTypes::U8,
|
||||
"i" => ValueTypes::I32,
|
||||
"I" => ValueTypes::U32,
|
||||
"f" => ValueTypes::F32,
|
||||
"d" => ValueTypes::F64,
|
||||
"h" => ValueTypes::I16,
|
||||
_ => panic!("Invalid type"),
|
||||
}
|
||||
}
|
||||
|
||||
fn _parse_matrix(
|
||||
input: &[u8],
|
||||
type_: ValueTypes,
|
||||
@ -224,255 +282,65 @@ impl Record {
|
||||
scale: f32,
|
||||
fill_value: f64,
|
||||
) -> IResult<&[u8], ValueResult> {
|
||||
use std::mem;
|
||||
let need_trans = offset != 0.0 || scale != 1.0;
|
||||
let trans_to_bigger = offset.trunc() != offset || scale != 1.0;
|
||||
match type_ {
|
||||
ValueTypes::I64 => {
|
||||
let ratio = mem::size_of::<i64>() / mem::size_of::<u8>();
|
||||
let (input, result) = take(len * ratio)(input)?;
|
||||
let result = unsafe {
|
||||
let ptr = result.as_ptr() as *const i64;
|
||||
let slice = std::slice::from_raw_parts(ptr, len);
|
||||
let slice = slice.to_vec();
|
||||
|
||||
if trans_to_bigger {
|
||||
let offset = offset as f32;
|
||||
ValueResult::F32(
|
||||
slice
|
||||
.into_iter()
|
||||
.filter(|p| *p as f64 != fill_value)
|
||||
.map(|p| p as f32 - offset / scale)
|
||||
.collect::<Vec<f32>>(),
|
||||
match_in_macro!(
|
||||
type_,
|
||||
len,
|
||||
input,
|
||||
offset,
|
||||
scale,
|
||||
fill_value,
|
||||
(
|
||||
ValueTypes::I64,
|
||||
i64,
|
||||
f64,
|
||||
ValueResult::I64,
|
||||
ValueResult::F64
|
||||
),
|
||||
(
|
||||
ValueTypes::F64,
|
||||
f64,
|
||||
f64,
|
||||
ValueResult::F64,
|
||||
ValueResult::F64
|
||||
),
|
||||
(
|
||||
ValueTypes::U64,
|
||||
u64,
|
||||
f64,
|
||||
ValueResult::U64,
|
||||
ValueResult::F64
|
||||
),
|
||||
(
|
||||
ValueTypes::I32,
|
||||
i32,
|
||||
f32,
|
||||
ValueResult::I32,
|
||||
ValueResult::F32
|
||||
),
|
||||
(
|
||||
ValueTypes::F32,
|
||||
f32,
|
||||
f32,
|
||||
ValueResult::F32,
|
||||
ValueResult::F32
|
||||
),
|
||||
(
|
||||
ValueTypes::U32,
|
||||
u32,
|
||||
f32,
|
||||
ValueResult::U32,
|
||||
ValueResult::F32
|
||||
),
|
||||
(
|
||||
ValueTypes::I16,
|
||||
i16,
|
||||
f32,
|
||||
ValueResult::I16,
|
||||
ValueResult::F32
|
||||
),
|
||||
(ValueTypes::I8, i8, f32, ValueResult::I8, ValueResult::F32),
|
||||
(ValueTypes::U8, u8, f32, ValueResult::U8, ValueResult::F32)
|
||||
)
|
||||
} else {
|
||||
ValueResult::I64(if need_trans {
|
||||
let offset = offset as i64;
|
||||
slice
|
||||
.into_iter()
|
||||
.filter(|p| *p as f64 != fill_value)
|
||||
.map(|p| p - offset)
|
||||
.collect::<Vec<i64>>()
|
||||
} else {
|
||||
slice
|
||||
})
|
||||
}
|
||||
};
|
||||
|
||||
Ok((input, result))
|
||||
}
|
||||
ValueTypes::F64 => {
|
||||
let ratio = mem::size_of::<f64>() / mem::size_of::<u8>();
|
||||
let (input, result) = take(len * ratio)(input)?;
|
||||
let result = unsafe {
|
||||
let ptr = result.as_ptr() as *const f64;
|
||||
let slice = std::slice::from_raw_parts(ptr, len);
|
||||
let slice = slice.to_vec();
|
||||
|
||||
ValueResult::F64(if need_trans {
|
||||
let offset = offset as f64;
|
||||
slice
|
||||
.into_iter()
|
||||
.filter(|p| *p as f64 != fill_value)
|
||||
.map(|p| p - offset / scale as f64)
|
||||
.collect::<Vec<f64>>()
|
||||
} else {
|
||||
slice
|
||||
})
|
||||
};
|
||||
|
||||
Ok((input, result))
|
||||
}
|
||||
ValueTypes::I32 => {
|
||||
let ratio = mem::size_of::<i32>() / mem::size_of::<u8>();
|
||||
let (input, result) = take(len * ratio)(input)?;
|
||||
let result = unsafe {
|
||||
let ptr = result.as_ptr() as *const i32;
|
||||
let slice = std::slice::from_raw_parts(ptr, len);
|
||||
let slice = slice.to_vec();
|
||||
|
||||
if trans_to_bigger {
|
||||
let offset = offset as f32;
|
||||
ValueResult::F32(
|
||||
slice
|
||||
.into_iter()
|
||||
.filter(|p| *p as f64 != fill_value)
|
||||
.map(|p| p as f32 - offset / scale)
|
||||
.collect::<Vec<f32>>(),
|
||||
)
|
||||
} else {
|
||||
ValueResult::I32(if need_trans {
|
||||
let offset = offset as i32;
|
||||
slice
|
||||
.into_iter()
|
||||
.filter(|p| *p as f64 != fill_value)
|
||||
.map(|p| p - offset)
|
||||
.collect::<Vec<i32>>()
|
||||
} else {
|
||||
slice
|
||||
})
|
||||
}
|
||||
};
|
||||
|
||||
Ok((input, result))
|
||||
}
|
||||
|
||||
ValueTypes::U32 => {
|
||||
let ratio = mem::size_of::<u32>() / mem::size_of::<u8>();
|
||||
let (input, result) = take(len * ratio)(input)?;
|
||||
let result = unsafe {
|
||||
let ptr = result.as_ptr() as *const u32;
|
||||
let slice = std::slice::from_raw_parts(ptr, len);
|
||||
let slice = slice.to_vec();
|
||||
|
||||
if trans_to_bigger {
|
||||
let offset = offset as f32;
|
||||
ValueResult::F32(
|
||||
slice
|
||||
.into_iter()
|
||||
.filter(|p| *p as f64 != fill_value)
|
||||
.map(|p| p as f32 - offset / scale)
|
||||
.collect::<Vec<f32>>(),
|
||||
)
|
||||
} else {
|
||||
ValueResult::U32(if need_trans {
|
||||
let offset = offset as u32;
|
||||
slice
|
||||
.into_iter()
|
||||
.filter(|p| *p as f64 != fill_value)
|
||||
.map(|p| p - offset)
|
||||
.collect::<Vec<u32>>()
|
||||
} else {
|
||||
slice
|
||||
})
|
||||
}
|
||||
};
|
||||
|
||||
Ok((input, result))
|
||||
}
|
||||
ValueTypes::F32 => {
|
||||
let ratio = mem::size_of::<f32>() / mem::size_of::<u8>();
|
||||
let (input, result) = take(len * ratio)(input)?;
|
||||
let result = unsafe {
|
||||
let ptr = result.as_ptr() as *const f32;
|
||||
let slice = std::slice::from_raw_parts(ptr, len);
|
||||
let slice = slice.to_vec();
|
||||
|
||||
ValueResult::F32(if need_trans {
|
||||
let offset = offset as f32;
|
||||
slice
|
||||
.into_iter()
|
||||
.map(|p| p - offset / scale)
|
||||
.collect::<Vec<f32>>()
|
||||
} else {
|
||||
slice
|
||||
})
|
||||
};
|
||||
|
||||
Ok((input, result))
|
||||
}
|
||||
ValueTypes::U64 => {
|
||||
let ratio = mem::size_of::<u64>() / mem::size_of::<u8>();
|
||||
let (input, result) = take(len * ratio)(input)?;
|
||||
let result = unsafe {
|
||||
let ptr = result.as_ptr() as *const u64;
|
||||
let slice = std::slice::from_raw_parts(ptr, len);
|
||||
let slice = slice.to_vec();
|
||||
|
||||
if trans_to_bigger {
|
||||
let offset = offset as f64;
|
||||
let scale = scale as f64;
|
||||
ValueResult::F64(
|
||||
slice
|
||||
.into_iter()
|
||||
.filter(|p| *p as f64 != fill_value)
|
||||
.map(|p| p as f64 - offset / scale)
|
||||
.collect::<Vec<f64>>(),
|
||||
)
|
||||
} else {
|
||||
ValueResult::U64(if need_trans {
|
||||
let offset = offset as u64;
|
||||
slice
|
||||
.into_iter()
|
||||
.filter(|p| *p as f64 != fill_value)
|
||||
.map(|p| p - offset)
|
||||
.collect::<Vec<u64>>()
|
||||
} else {
|
||||
slice
|
||||
})
|
||||
}
|
||||
};
|
||||
|
||||
Ok((input, result))
|
||||
}
|
||||
ValueTypes::I8 => {
|
||||
let (input, result) = take(len)(input)?;
|
||||
let result = unsafe {
|
||||
let ptr = result.as_ptr() as *const i8;
|
||||
let slice = std::slice::from_raw_parts(ptr, len);
|
||||
|
||||
let slice = slice.to_vec();
|
||||
|
||||
if trans_to_bigger {
|
||||
let offset = offset as f32;
|
||||
ValueResult::F32(
|
||||
slice
|
||||
.into_iter()
|
||||
.filter(|p| *p as f64 != fill_value)
|
||||
.map(|p| p as f32 - offset / scale)
|
||||
.collect::<Vec<f32>>(),
|
||||
)
|
||||
} else {
|
||||
ValueResult::I8(if need_trans {
|
||||
let offset = offset as i8;
|
||||
slice
|
||||
.into_iter()
|
||||
.filter(|p| *p as f64 != fill_value)
|
||||
.map(|p| p - offset)
|
||||
.collect::<Vec<i8>>()
|
||||
} else {
|
||||
slice
|
||||
})
|
||||
}
|
||||
};
|
||||
Ok((input, result))
|
||||
}
|
||||
|
||||
ValueTypes::U8 => {
|
||||
let (input, slice) = take(len)(input)?;
|
||||
let slice = slice.to_vec();
|
||||
let result = if trans_to_bigger {
|
||||
let offset = offset as f32;
|
||||
ValueResult::F32(
|
||||
slice
|
||||
.into_iter()
|
||||
.map(|p| p as f32 - offset / scale)
|
||||
.collect::<Vec<f32>>(),
|
||||
)
|
||||
} else {
|
||||
ValueResult::U8(if need_trans {
|
||||
let offset = offset as u8;
|
||||
slice.into_iter().map(|p| p - offset).collect::<Vec<u8>>()
|
||||
} else {
|
||||
slice
|
||||
})
|
||||
};
|
||||
|
||||
Ok((input, result))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn _parse_type<'a>(type_str: &'a str) -> ValueTypes {
|
||||
match type_str {
|
||||
"b" => ValueTypes::I8,
|
||||
"B" => ValueTypes::U8,
|
||||
"i" => ValueTypes::I32,
|
||||
"I" => ValueTypes::U32,
|
||||
"f" => ValueTypes::F32,
|
||||
"d" => ValueTypes::F64,
|
||||
_ => panic!("Invalid type"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -502,3 +370,231 @@ pub struct ParsedBlock {
|
||||
pub info: BlockJsonInfo,
|
||||
pub data: ValueResult,
|
||||
}
|
||||
|
||||
// fn _parse_matrix(
|
||||
// input: &[u8],
|
||||
// type_: ValueTypes,
|
||||
// order: Order,
|
||||
// len: usize,
|
||||
// offset: f32,
|
||||
// scale: f32,
|
||||
// fill_value: f64,
|
||||
// ) -> IResult<&[u8], ValueResult> {
|
||||
// use std::mem;
|
||||
// let need_trans = offset != 0.0 || scale != 1.0;
|
||||
// let trans_to_bigger = offset.trunc() != offset || scale != 1.0;
|
||||
// match type_ {
|
||||
// ValueTypes::I64 => {
|
||||
// let ratio = mem::size_of::<i64>() / mem::size_of::<u8>();
|
||||
// let (input, result) = take(len * ratio)(input)?;
|
||||
// let result = unsafe {
|
||||
// let ptr = result.as_ptr() as *const i64;
|
||||
// let slice = std::slice::from_raw_parts(ptr, len);
|
||||
// let slice = slice.to_vec();
|
||||
|
||||
// if trans_to_bigger {
|
||||
// let offset = offset as f32;
|
||||
// ValueResult::F32(
|
||||
// slice
|
||||
// .into_iter()
|
||||
// .map(|p| (p as f32 - offset) / scale)
|
||||
// .collect::<Vec<f32>>(),
|
||||
// )
|
||||
// } else {
|
||||
// ValueResult::I64(if need_trans {
|
||||
// let offset = offset as i64;
|
||||
// slice.into_iter().map(|p| p - offset).collect::<Vec<i64>>()
|
||||
// } else {
|
||||
// slice
|
||||
// })
|
||||
// }
|
||||
// };
|
||||
|
||||
// Ok((input, result))
|
||||
// }
|
||||
// ValueTypes::F64 => {
|
||||
// let ratio = mem::size_of::<f64>() / mem::size_of::<u8>();
|
||||
// let (input, result) = take(len * ratio)(input)?;
|
||||
// let result = unsafe {
|
||||
// let ptr = result.as_ptr() as *const f64;
|
||||
// let slice = std::slice::from_raw_parts(ptr, len);
|
||||
// let slice = slice.to_vec();
|
||||
|
||||
// ValueResult::F64(if need_trans {
|
||||
// let offset = offset as f64;
|
||||
// slice
|
||||
// .into_iter()
|
||||
// .map(|p| (p - offset) / scale as f64)
|
||||
// .collect::<Vec<f64>>()
|
||||
// } else {
|
||||
// slice
|
||||
// })
|
||||
// };
|
||||
|
||||
// Ok((input, result))
|
||||
// }
|
||||
// ValueTypes::I32 => {
|
||||
// let ratio = mem::size_of::<i32>() / mem::size_of::<u8>();
|
||||
// let (input, result) = take(len * ratio)(input)?;
|
||||
// let result = unsafe {
|
||||
// let ptr = result.as_ptr() as *const i32;
|
||||
// let slice = std::slice::from_raw_parts(ptr, len);
|
||||
// let slice = slice.to_vec();
|
||||
|
||||
// if trans_to_bigger {
|
||||
// let offset = offset as f32;
|
||||
// ValueResult::F32(
|
||||
// slice
|
||||
// .into_iter()
|
||||
// .map(|p| (p as f32 - offset) / scale)
|
||||
// .collect::<Vec<f32>>(),
|
||||
// )
|
||||
// } else {
|
||||
// ValueResult::I32(if need_trans {
|
||||
// let offset = offset as i32;
|
||||
// slice.into_iter().map(|p| p - offset).collect::<Vec<i32>>()
|
||||
// } else {
|
||||
// slice
|
||||
// })
|
||||
// }
|
||||
// };
|
||||
|
||||
// Ok((input, result))
|
||||
// }
|
||||
|
||||
// ValueTypes::U32 => {
|
||||
// let ratio = mem::size_of::<u32>() / mem::size_of::<u8>();
|
||||
// let (input, result) = take(len * ratio)(input)?;
|
||||
// let result = unsafe {
|
||||
// let ptr = result.as_ptr() as *const u32;
|
||||
// let slice = std::slice::from_raw_parts(ptr, len);
|
||||
// let slice = slice.to_vec();
|
||||
|
||||
// if trans_to_bigger {
|
||||
// let offset = offset as f32;
|
||||
// ValueResult::F32(
|
||||
// slice
|
||||
// .into_iter()
|
||||
// .map(|p| (p as f32 - offset) / scale)
|
||||
// .collect::<Vec<f32>>(),
|
||||
// )
|
||||
// } else {
|
||||
// ValueResult::U32(if need_trans {
|
||||
// let offset = offset as u32;
|
||||
// slice.into_iter().map(|p| p - offset).collect::<Vec<u32>>()
|
||||
// } else {
|
||||
// slice
|
||||
// })
|
||||
// }
|
||||
// };
|
||||
|
||||
// Ok((input, result))
|
||||
// }
|
||||
// ValueTypes::F32 => {
|
||||
// let ratio = mem::size_of::<f32>() / mem::size_of::<u8>();
|
||||
// let (input, result) = take(len * ratio)(input)?;
|
||||
// let result = unsafe {
|
||||
// let ptr = result.as_ptr() as *const f32;
|
||||
// let slice = std::slice::from_raw_parts(ptr, len);
|
||||
// let slice = slice.to_vec();
|
||||
|
||||
// ValueResult::F32(if need_trans {
|
||||
// let offset = offset as f32;
|
||||
// slice
|
||||
// .into_iter()
|
||||
// .map(|p| (p - offset) / scale)
|
||||
// .collect::<Vec<f32>>()
|
||||
// } else {
|
||||
// slice
|
||||
// })
|
||||
// };
|
||||
|
||||
// Ok((input, result))
|
||||
// }
|
||||
// ValueTypes::U64 => {
|
||||
// let ratio = mem::size_of::<u64>() / mem::size_of::<u8>();
|
||||
// let (input, result) = take(len * ratio)(input)?;
|
||||
// let result = unsafe {
|
||||
// let ptr = result.as_ptr() as *const u64;
|
||||
// let slice = std::slice::from_raw_parts(ptr, len);
|
||||
// let slice = slice.to_vec();
|
||||
|
||||
// if trans_to_bigger {
|
||||
// let offset = offset as f64;
|
||||
// let scale = scale as f64;
|
||||
// ValueResult::F64(
|
||||
// slice
|
||||
// .into_iter()
|
||||
// .map(|p| (p as f64 - offset) / scale)
|
||||
// .collect::<Vec<f64>>(),
|
||||
// )
|
||||
// } else {
|
||||
// ValueResult::U64(if need_trans {
|
||||
// let offset = offset as u64;
|
||||
// slice.into_iter().map(|p| p - offset).collect::<Vec<u64>>()
|
||||
// } else {
|
||||
// slice
|
||||
// })
|
||||
// }
|
||||
// };
|
||||
|
||||
// Ok((input, result))
|
||||
// }
|
||||
// ValueTypes::I8 => {
|
||||
// let (input, result) = take(len)(input)?;
|
||||
// let result = unsafe {
|
||||
// let ptr = result.as_ptr() as *const i8;
|
||||
// let slice = std::slice::from_raw_parts(ptr, len);
|
||||
|
||||
// let slice = slice.to_vec();
|
||||
|
||||
// if trans_to_bigger {
|
||||
// let offset = offset as f32;
|
||||
// ValueResult::F32(
|
||||
// slice
|
||||
// .into_iter()
|
||||
// .map(|p| (p as f32 - offset) / scale)
|
||||
// .collect::<Vec<f32>>(),
|
||||
// )
|
||||
// } else {
|
||||
// ValueResult::I8(if need_trans {
|
||||
// let offset = offset as i8;
|
||||
// slice.into_iter().map(|p| p - offset).collect::<Vec<i8>>()
|
||||
// } else {
|
||||
// slice
|
||||
// })
|
||||
// }
|
||||
// };
|
||||
// Ok((input, result))
|
||||
// }
|
||||
|
||||
// ValueTypes::U8 => {
|
||||
// let (input, slice) = take(len)(input)?;
|
||||
// let slice = slice.to_vec();
|
||||
// let result = if trans_to_bigger {
|
||||
// let offset = offset as f32;
|
||||
// ValueResult::F32(
|
||||
// slice
|
||||
// .into_iter()
|
||||
// .map(|p| {
|
||||
// if p as f64 != fill_value {
|
||||
// (p as f32 - offset) / scale
|
||||
// } else {
|
||||
// p as f32
|
||||
// }
|
||||
// })
|
||||
// .collect::<Vec<f32>>(),
|
||||
// )
|
||||
// } else {
|
||||
// ValueResult::U8(if need_trans {
|
||||
// let offset = offset as u8;
|
||||
// slice.into_iter().map(|p| p - offset).collect::<Vec<u8>>()
|
||||
// } else {
|
||||
// slice
|
||||
// })
|
||||
// };
|
||||
|
||||
// Ok((input, result))
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
@ -1 +1 @@
|
||||
{"rustc_fingerprint":8475780184195034948,"outputs":{"15729799797837862367":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n/Users/ruomu/.rustup/toolchains/nightly-x86_64-apple-darwin\noff\npacked\nunpacked\n___\ndebug_assertions\noverflow_checks\npanic=\"unwind\"\nproc_macro\nrelocation_model=\"pic\"\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_family=\"unix\"\ntarget_feature=\"cmpxchg16b\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_feature=\"sse3\"\ntarget_feature=\"ssse3\"\ntarget_has_atomic\ntarget_has_atomic=\"128\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_has_atomic_equal_alignment=\"16\"\ntarget_has_atomic_equal_alignment=\"32\"\ntarget_has_atomic_equal_alignment=\"64\"\ntarget_has_atomic_equal_alignment=\"8\"\ntarget_has_atomic_equal_alignment=\"ptr\"\ntarget_has_atomic_load_store\ntarget_has_atomic_load_store=\"128\"\ntarget_has_atomic_load_store=\"16\"\ntarget_has_atomic_load_store=\"32\"\ntarget_has_atomic_load_store=\"64\"\ntarget_has_atomic_load_store=\"8\"\ntarget_has_atomic_load_store=\"ptr\"\ntarget_os=\"macos\"\ntarget_pointer_width=\"64\"\ntarget_thread_local\ntarget_vendor=\"apple\"\nunix\n","stderr":""},"4614504638168534921":{"success":true,"status":"","code":0,"stdout":"rustc 1.74.0-nightly (8142a319e 2023-09-13)\nbinary: rustc\ncommit-hash: 8142a319ed5c1d1f96e5a1881a6546e463b77c8f\ncommit-date: 2023-09-13\nhost: x86_64-apple-darwin\nrelease: 1.74.0-nightly\nLLVM version: 17.0.0\n","stderr":""}},"successes":{}}
|
||||
{"rustc_fingerprint":6534886339914138005,"outputs":{"15729799797837862367":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n/Users/tsuki/.rustup/toolchains/nightly-aarch64-apple-darwin\noff\npacked\nunpacked\n___\ndebug_assertions\noverflow_checks\npanic=\"unwind\"\nproc_macro\nrelocation_model=\"pic\"\ntarget_abi=\"\"\ntarget_arch=\"aarch64\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_family=\"unix\"\ntarget_feature=\"aes\"\ntarget_feature=\"crc\"\ntarget_feature=\"dit\"\ntarget_feature=\"dotprod\"\ntarget_feature=\"dpb\"\ntarget_feature=\"dpb2\"\ntarget_feature=\"fcma\"\ntarget_feature=\"fhm\"\ntarget_feature=\"flagm\"\ntarget_feature=\"fp16\"\ntarget_feature=\"frintts\"\ntarget_feature=\"jsconv\"\ntarget_feature=\"lor\"\ntarget_feature=\"lse\"\ntarget_feature=\"neon\"\ntarget_feature=\"paca\"\ntarget_feature=\"pacg\"\ntarget_feature=\"pan\"\ntarget_feature=\"pmuv3\"\ntarget_feature=\"ras\"\ntarget_feature=\"rcpc\"\ntarget_feature=\"rcpc2\"\ntarget_feature=\"rdm\"\ntarget_feature=\"sb\"\ntarget_feature=\"sha2\"\ntarget_feature=\"sha3\"\ntarget_feature=\"ssbs\"\ntarget_feature=\"v8.1a\"\ntarget_feature=\"v8.2a\"\ntarget_feature=\"v8.3a\"\ntarget_feature=\"v8.4a\"\ntarget_feature=\"vh\"\ntarget_has_atomic\ntarget_has_atomic=\"128\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_has_atomic_equal_alignment=\"128\"\ntarget_has_atomic_equal_alignment=\"16\"\ntarget_has_atomic_equal_alignment=\"32\"\ntarget_has_atomic_equal_alignment=\"64\"\ntarget_has_atomic_equal_alignment=\"8\"\ntarget_has_atomic_equal_alignment=\"ptr\"\ntarget_has_atomic_load_store\ntarget_has_atomic_load_store=\"128\"\ntarget_has_atomic_load_store=\"16\"\ntarget_has_atomic_load_store=\"32\"\ntarget_has_atomic_load_store=\"64\"\ntarget_has_atomic_load_store=\"8\"\ntarget_has_atomic_load_store=\"ptr\"\ntarget_os=\"macos\"\ntarget_pointer_width=\"64\"\ntarget_thread_local\ntarget_vendor=\"apple\"\nunix\n","stderr":""},"15481046163696847946":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n/Users/tsuki/.rustup/toolchains/nightly-aarch64-apple-darwin\noff\npacked\nunpacked\n___\ndebug_assertions\noverflow_checks\npanic=\"unwind\"\nproc_macro\nrelocation_model=\"pic\"\ntarget_abi=\"\"\ntarget_arch=\"aarch64\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_family=\"unix\"\ntarget_feature=\"aes\"\ntarget_feature=\"crc\"\ntarget_feature=\"dit\"\ntarget_feature=\"dotprod\"\ntarget_feature=\"dpb\"\ntarget_feature=\"dpb2\"\ntarget_feature=\"fcma\"\ntarget_feature=\"fhm\"\ntarget_feature=\"flagm\"\ntarget_feature=\"fp16\"\ntarget_feature=\"frintts\"\ntarget_feature=\"jsconv\"\ntarget_feature=\"lor\"\ntarget_feature=\"lse\"\ntarget_feature=\"neon\"\ntarget_feature=\"paca\"\ntarget_feature=\"pacg\"\ntarget_feature=\"pan\"\ntarget_feature=\"pmuv3\"\ntarget_feature=\"ras\"\ntarget_feature=\"rcpc\"\ntarget_feature=\"rcpc2\"\ntarget_feature=\"rdm\"\ntarget_feature=\"sb\"\ntarget_feature=\"sha2\"\ntarget_feature=\"sha3\"\ntarget_feature=\"ssbs\"\ntarget_feature=\"v8.1a\"\ntarget_feature=\"v8.2a\"\ntarget_feature=\"v8.3a\"\ntarget_feature=\"v8.4a\"\ntarget_feature=\"vh\"\ntarget_has_atomic\ntarget_has_atomic=\"128\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_has_atomic_equal_alignment=\"128\"\ntarget_has_atomic_equal_alignment=\"16\"\ntarget_has_atomic_equal_alignment=\"32\"\ntarget_has_atomic_equal_alignment=\"64\"\ntarget_has_atomic_equal_alignment=\"8\"\ntarget_has_atomic_equal_alignment=\"ptr\"\ntarget_has_atomic_load_store\ntarget_has_atomic_load_store=\"128\"\ntarget_has_atomic_load_store=\"16\"\ntarget_has_atomic_load_store=\"32\"\ntarget_has_atomic_load_store=\"64\"\ntarget_has_atomic_load_store=\"8\"\ntarget_has_atomic_load_store=\"ptr\"\ntarget_os=\"macos\"\ntarget_pointer_width=\"64\"\ntarget_thread_local\ntarget_vendor=\"apple\"\nunix\n","stderr":""},"4614504638168534921":{"success":true,"status":"","code":0,"stdout":"rustc 1.77.0-nightly (d78329b92 2024-01-13)\nbinary: rustc\ncommit-hash: d78329b92e8d141d19505e7c1527181c4ab87ed4\ncommit-date: 2024-01-13\nhost: aarch64-apple-darwin\nrelease: 1.77.0-nightly\nLLVM version: 17.0.6\n","stderr":""}},"successes":{}}
|
||||
@ -1 +1 @@
|
||||
747a3e56d0023d1f
|
||||
16f3840281ed1c0f
|
||||
@ -1 +1 @@
|
||||
{"rustc":2034204546556879275,"features":"[]","target":8454914719411586997,"profile":3567329628440936607,"path":17523903030608720598,"deps":[[3470807962260834726,"serde",false,4787662401497216020],[6147374319788932929,"serde_json",false,13625016085015906423],[6644485573429891122,"thiserror",false,1778660508903088478],[6954241390595330609,"nom",false,2941494162337318825],[8926101378076943148,"byteorder",false,13786993926510157100],[8944703748776155531,"chrono",false,9456401766367467294],[10043922549268360936,"radarg_plugin_interface",false,11802334733291555594],[11138931377059941435,"num_traits",false,2532219253751132008],[12701726091060201577,"abi_stable",false,2027217686562626457],[12732307821348191974,"anyhow",false,10525944046939466143],[12935855096716563853,"flate2",false,6751665531550146114],[16098302879908240583,"nom_derive",false,13622616610426096756]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/etws_loader-826e392dbec97b5d/dep-lib-etws_loader"}}],"rustflags":[],"metadata":41698518999418921,"config":2202906307356721367,"compile_kind":0}
|
||||
{"rustc":17942353898403517573,"features":"[]","declared_features":"","target":8454914719411586997,"profile":14094339167972473758,"path":17523903030608720598,"deps":[[3470807962260834726,"serde",false,3464438898850424389],[6147374319788932929,"serde_json",false,4018346002534341099],[6644485573429891122,"thiserror",false,15376366722783231122],[6954241390595330609,"nom",false,17004332135801955629],[8926101378076943148,"byteorder",false,6029042559770906212],[8944703748776155531,"chrono",false,14085117952510397354],[10043922549268360936,"radarg_plugin_interface",false,2929903515477199145],[11138931377059941435,"num_traits",false,16208028648554347177],[12701726091060201577,"abi_stable",false,46919867052192855],[12732307821348191974,"anyhow",false,13132421988549874417],[12935855096716563853,"flate2",false,9880693184163145737],[16098302879908240583,"nom_derive",false,9783335926581460414]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/etws_loader-826e392dbec97b5d/dep-lib-etws_loader"}}],"rustflags":[],"metadata":41698518999418921,"config":2202906307356721367,"compile_kind":0}
|
||||
@ -1,7 +1,7 @@
|
||||
{"message":"unused imports: `Write`, `self`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":323,"byte_end":327,"line_start":13,"line_end":13,"column_start":15,"column_end":19,"is_primary":true,"text":[{"text":"use std::io::{self, Read, Write};","highlight_start":15,"highlight_end":19}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":335,"byte_end":340,"line_start":13,"line_end":13,"column_start":27,"column_end":32,"is_primary":true,"text":[{"text":"use std::io::{self, Read, Write};","highlight_start":27,"highlight_end":32}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_imports)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"remove the unused imports","code":null,"level":"help","spans":[{"file_name":"src/parser.rs","byte_start":323,"byte_end":329,"line_start":13,"line_end":13,"column_start":15,"column_end":21,"is_primary":true,"text":[{"text":"use std::io::{self, Read, Write};","highlight_start":15,"highlight_end":21}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"src/parser.rs","byte_start":333,"byte_end":340,"line_start":13,"line_end":13,"column_start":25,"column_end":32,"is_primary":true,"text":[{"text":"use std::io::{self, Read, Write};","highlight_start":25,"highlight_end":32}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused imports: `Write`, `self`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/parser.rs:13:15\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m13\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0muse std::io::{self, Read, Write};\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_imports)]` on by default\u001b[0m\n\n"}
|
||||
{"message":"unused import: `RNone`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/lib.rs","byte_start":180,"byte_end":185,"line_start":9,"line_end":9,"column_start":9,"column_end":14,"is_primary":true,"text":[{"text":" RNone, ROk,","highlight_start":9,"highlight_end":14}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove the unused import","code":null,"level":"help","spans":[{"file_name":"src/lib.rs","byte_start":180,"byte_end":187,"line_start":9,"line_end":9,"column_start":9,"column_end":16,"is_primary":true,"text":[{"text":" RNone, ROk,","highlight_start":9,"highlight_end":16}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused import: `RNone`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lib.rs:9:9\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m9\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m RNone, ROk,\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^\u001b[0m\n\n"}
|
||||
{"message":"unused variable: `hlen2`","code":{"code":"unused_variables","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":4573,"byte_end":4578,"line_start":153,"line_end":153,"column_start":21,"column_end":26,"is_primary":true,"text":[{"text":" let (input, hlen2) = Self::_parse_u32(input, order)?;","highlight_start":21,"highlight_end":26}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_variables)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"if this is intentional, prefix it with an underscore","code":null,"level":"help","spans":[{"file_name":"src/parser.rs","byte_start":4573,"byte_end":4578,"line_start":153,"line_end":153,"column_start":21,"column_end":26,"is_primary":true,"text":[{"text":" let (input, hlen2) = Self::_parse_u32(input, order)?;","highlight_start":21,"highlight_end":26}],"label":null,"suggested_replacement":"_hlen2","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused variable: `hlen2`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/parser.rs:153:21\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m153\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let (input, hlen2) = Self::_parse_u32(input, order)?;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33mhelp: if this is intentional, prefix it with an underscore: `_hlen2`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_variables)]` on by default\u001b[0m\n\n"}
|
||||
{"message":"unused variable: `order`","code":{"code":"unused_variables","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":6566,"byte_end":6571,"line_start":221,"line_end":221,"column_start":9,"column_end":14,"is_primary":true,"text":[{"text":" order: Order,","highlight_start":9,"highlight_end":14}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"if this is intentional, prefix it with an underscore","code":null,"level":"help","spans":[{"file_name":"src/parser.rs","byte_start":6566,"byte_end":6571,"line_start":221,"line_end":221,"column_start":9,"column_end":14,"is_primary":true,"text":[{"text":" order: Order,","highlight_start":9,"highlight_end":14}],"label":null,"suggested_replacement":"_order","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused variable: `order`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/parser.rs:221:9\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m221\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m order: Order,\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33mhelp: if this is intentional, prefix it with an underscore: `_order`\u001b[0m\n\n"}
|
||||
{"message":"unused variable: `dimension_len`","code":{"code":"unused_variables","explanation":null},"level":"warning","spans":[{"file_name":"src/lib.rs","byte_start":1019,"byte_end":1032,"line_start":41,"line_end":41,"column_start":26,"column_end":39,"is_primary":true,"text":[{"text":" let (dimension_len, data) = match b.data {","highlight_start":26,"highlight_end":39}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"if this is intentional, prefix it with an underscore","code":null,"level":"help","spans":[{"file_name":"src/lib.rs","byte_start":1019,"byte_end":1032,"line_start":41,"line_end":41,"column_start":26,"column_end":39,"is_primary":true,"text":[{"text":" let (dimension_len, data) = match b.data {","highlight_start":26,"highlight_end":39}],"label":null,"suggested_replacement":"_dimension_len","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused variable: `dimension_len`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lib.rs:41:26\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m41\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let (dimension_len, data) = match b.data {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33mhelp: if this is intentional, prefix it with an underscore: `_dimension_len`\u001b[0m\n\n"}
|
||||
{"message":"variants `I64` and `U64` are never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":544,"byte_end":554,"line_start":27,"line_end":27,"column_start":6,"column_end":16,"is_primary":false,"text":[{"text":"enum ValueTypes {","highlight_start":6,"highlight_end":16}],"label":"variants in this enum","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":561,"byte_end":564,"line_start":28,"line_end":28,"column_start":5,"column_end":8,"is_primary":true,"text":[{"text":" I64,","highlight_start":5,"highlight_end":8}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":597,"byte_end":600,"line_start":32,"line_end":32,"column_start":5,"column_end":8,"is_primary":true,"text":[{"text":" U64,","highlight_start":5,"highlight_end":8}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(dead_code)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: variants `I64` and `U64` are never constructed\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/parser.rs:28:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m27\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0menum ValueTypes {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m----------\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mvariants in this enum\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m28\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m I64,\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m32\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m U64,\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(dead_code)]` on by default\u001b[0m\n\n"}
|
||||
{"message":"6 warnings emitted","code":null,"level":"warning","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: 6 warnings emitted\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"unused imports: `Write`, `self`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":323,"byte_end":327,"line_start":13,"line_end":13,"column_start":15,"column_end":19,"is_primary":true,"text":[{"text":"use std::io::{self, Read, Write};","highlight_start":15,"highlight_end":19}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":335,"byte_end":340,"line_start":13,"line_end":13,"column_start":27,"column_end":32,"is_primary":true,"text":[{"text":"use std::io::{self, Read, Write};","highlight_start":27,"highlight_end":32}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_imports)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"remove the unused imports","code":null,"level":"help","spans":[{"file_name":"src/parser.rs","byte_start":323,"byte_end":329,"line_start":13,"line_end":13,"column_start":15,"column_end":21,"is_primary":true,"text":[{"text":"use std::io::{self, Read, Write};","highlight_start":15,"highlight_end":21}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"src/parser.rs","byte_start":333,"byte_end":340,"line_start":13,"line_end":13,"column_start":25,"column_end":32,"is_primary":true,"text":[{"text":"use std::io::{self, Read, Write};","highlight_start":25,"highlight_end":32}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused imports: `Write`, `self`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/parser.rs:13:15\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m13\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0muse std::io::{self, Read, Write};\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_imports)]` on by default\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"unused import: `RNone`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/lib.rs","byte_start":180,"byte_end":185,"line_start":9,"line_end":9,"column_start":9,"column_end":14,"is_primary":true,"text":[{"text":" RNone, ROk,","highlight_start":9,"highlight_end":14}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove the unused import","code":null,"level":"help","spans":[{"file_name":"src/lib.rs","byte_start":180,"byte_end":187,"line_start":9,"line_end":9,"column_start":9,"column_end":16,"is_primary":true,"text":[{"text":" RNone, ROk,","highlight_start":9,"highlight_end":16}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused import: `RNone`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lib.rs:9:9\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m9\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m RNone, ROk,\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"unused variable: `hlen2`","code":{"code":"unused_variables","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":6651,"byte_end":6656,"line_start":198,"line_end":198,"column_start":21,"column_end":26,"is_primary":true,"text":[{"text":" let (input, hlen2) = Self::_parse_u32(input, order)?;","highlight_start":21,"highlight_end":26}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_variables)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"if this is intentional, prefix it with an underscore","code":null,"level":"help","spans":[{"file_name":"src/parser.rs","byte_start":6651,"byte_end":6656,"line_start":198,"line_end":198,"column_start":21,"column_end":26,"is_primary":true,"text":[{"text":" let (input, hlen2) = Self::_parse_u32(input, order)?;","highlight_start":21,"highlight_end":26}],"label":null,"suggested_replacement":"_hlen2","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused variable: `hlen2`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/parser.rs:198:21\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m198\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let (input, hlen2) = Self::_parse_u32(input, order)?;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33mhelp: if this is intentional, prefix it with an underscore: `_hlen2`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_variables)]` on by default\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"unused variable: `order`","code":{"code":"unused_variables","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":9035,"byte_end":9040,"line_start":279,"line_end":279,"column_start":9,"column_end":14,"is_primary":true,"text":[{"text":" order: Order,","highlight_start":9,"highlight_end":14}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"if this is intentional, prefix it with an underscore","code":null,"level":"help","spans":[{"file_name":"src/parser.rs","byte_start":9035,"byte_end":9040,"line_start":279,"line_end":279,"column_start":9,"column_end":14,"is_primary":true,"text":[{"text":" order: Order,","highlight_start":9,"highlight_end":14}],"label":null,"suggested_replacement":"_order","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused variable: `order`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/parser.rs:279:9\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m279\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m order: Order,\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33mhelp: if this is intentional, prefix it with an underscore: `_order`\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"unused variable: `dimension_len`","code":{"code":"unused_variables","explanation":null},"level":"warning","spans":[{"file_name":"src/lib.rs","byte_start":1019,"byte_end":1032,"line_start":41,"line_end":41,"column_start":26,"column_end":39,"is_primary":true,"text":[{"text":" let (dimension_len, data) = match b.data {","highlight_start":26,"highlight_end":39}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"if this is intentional, prefix it with an underscore","code":null,"level":"help","spans":[{"file_name":"src/lib.rs","byte_start":1019,"byte_end":1032,"line_start":41,"line_end":41,"column_start":26,"column_end":39,"is_primary":true,"text":[{"text":" let (dimension_len, data) = match b.data {","highlight_start":26,"highlight_end":39}],"label":null,"suggested_replacement":"_dimension_len","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused variable: `dimension_len`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lib.rs:41:26\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m41\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let (dimension_len, data) = match b.data {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33mhelp: if this is intentional, prefix it with an underscore: `_dimension_len`\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"variants `I64` and `U64` are never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":563,"byte_end":573,"line_start":28,"line_end":28,"column_start":6,"column_end":16,"is_primary":false,"text":[{"text":"enum ValueTypes {","highlight_start":6,"highlight_end":16}],"label":"variants in this enum","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":580,"byte_end":583,"line_start":29,"line_end":29,"column_start":5,"column_end":8,"is_primary":true,"text":[{"text":" I64,","highlight_start":5,"highlight_end":8}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":616,"byte_end":619,"line_start":33,"line_end":33,"column_start":5,"column_end":8,"is_primary":true,"text":[{"text":" U64,","highlight_start":5,"highlight_end":8}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(dead_code)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: variants `I64` and `U64` are never constructed\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/parser.rs:29:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m28\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0menum ValueTypes {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m----------\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mvariants in this enum\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m29\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m I64,\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m33\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m U64,\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(dead_code)]` on by default\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"6 warnings emitted","code":null,"level":"warning","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: 6 warnings emitted\u001b[0m\n\n"}
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
/Users/ruomu/projects/cinrad_g/etws_loader/target/release/deps/libetws_loader.dylib: src/lib.rs src/error.rs src/parser.rs
|
||||
/Users/tsuki/projects/radar-g/etws_loader/target/release/deps/libetws_loader.dylib: src/lib.rs src/error.rs src/parser.rs
|
||||
|
||||
/Users/ruomu/projects/cinrad_g/etws_loader/target/release/deps/libetws_loader.rlib: src/lib.rs src/error.rs src/parser.rs
|
||||
/Users/tsuki/projects/radar-g/etws_loader/target/release/deps/libetws_loader.rlib: src/lib.rs src/error.rs src/parser.rs
|
||||
|
||||
/Users/ruomu/projects/cinrad_g/etws_loader/target/release/deps/etws_loader.d: src/lib.rs src/error.rs src/parser.rs
|
||||
/Users/tsuki/projects/radar-g/etws_loader/target/release/deps/etws_loader.d: src/lib.rs src/error.rs src/parser.rs
|
||||
|
||||
src/lib.rs:
|
||||
src/error.rs:
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@ -1 +1 @@
|
||||
/Users/ruomu/projects/cinrad_g/etws_loader/target/release/libetws_loader.dylib: /Users/ruomu/projects/cinrad_g/etws_loader/src/error.rs /Users/ruomu/projects/cinrad_g/etws_loader/src/lib.rs /Users/ruomu/projects/cinrad_g/etws_loader/src/parser.rs /Users/ruomu/projects/cinrad_g/radarg_plugin_interface/src/error.rs /Users/ruomu/projects/cinrad_g/radarg_plugin_interface/src/lib.rs
|
||||
/Users/tsuki/projects/radar-g/etws_loader/target/release/libetws_loader.dylib: /Users/tsuki/projects/radar-g/etws_loader/src/error.rs /Users/tsuki/projects/radar-g/etws_loader/src/lib.rs /Users/tsuki/projects/radar-g/etws_loader/src/parser.rs /Users/tsuki/projects/radar-g/radarg_plugin_interface/src/error.rs /Users/tsuki/projects/radar-g/radarg_plugin_interface/src/lib.rs
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@ -37,6 +37,7 @@ pub enum VecResult {
|
||||
I64(RVec<i64>),
|
||||
F64(RVec<f64>),
|
||||
I32(RVec<i32>),
|
||||
I16(RVec<i16>),
|
||||
F32(RVec<f32>),
|
||||
U64(RVec<u64>),
|
||||
U32(RVec<u32>),
|
||||
|
||||
@ -1,8 +1,10 @@
|
||||
use std::fmt::Debug;
|
||||
|
||||
use crate::widgets::render::Layer;
|
||||
use crate::widgets::{render::Layer, widget::Widget};
|
||||
|
||||
pub enum MonitorInputMsg {
|
||||
AddWidget(Box<dyn Widget>),
|
||||
RemoveWidget,
|
||||
AddLayer(Layer),
|
||||
RemoveLayer(String),
|
||||
UpdateLayer((String, Box<dyn Fn(&mut Layer) + 'static>)),
|
||||
@ -16,6 +18,8 @@ impl Debug for MonitorInputMsg {
|
||||
MonitorInputMsg::RemoveLayer(_) => write!(f, "MonitorInputMsg::RemoveLayer"),
|
||||
MonitorInputMsg::UpdateLayer(_) => write!(f, "MonitorInputMsg::UpdateLayer"),
|
||||
MonitorInputMsg::None => write!(f, "MonitorInputMsg::None"),
|
||||
MonitorInputMsg::AddWidget(_) => write!(f, "MonitorInputMsg::AddWidget"),
|
||||
MonitorInputMsg::RemoveWidget => write!(f, "MonitorInputMsg::RemoveWidget"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,10 @@
|
||||
use super::messages::{MonitorInputMsg, MonitorOutputMsg};
|
||||
use crate::pipeline::offscreen_renderer::OffscreenRenderer;
|
||||
use crate::widgets::predefined::color_mapper::BoundaryNorm;
|
||||
use crate::widgets::predefined::widgets::ColorBar;
|
||||
use crate::widgets::render::{RenderConfig, Target, CMS};
|
||||
use crate::widgets::widget::{Widget, WidgetType};
|
||||
use crate::widgets::WidgetFrame;
|
||||
use crate::{
|
||||
coords::{proj::Mercator, Mapper},
|
||||
widgets::dynamic_col::DynamicCol,
|
||||
@ -29,6 +33,8 @@ pub struct MonitorModel {
|
||||
sidebar_width: i32,
|
||||
new_layer: i8,
|
||||
#[no_eq]
|
||||
widgets: Vec<WidgetFrame>,
|
||||
#[no_eq]
|
||||
layers: Rc<RefCell<HashMap<String, Layer>>>,
|
||||
#[no_eq]
|
||||
sidebar: Controller<SideBarModel>,
|
||||
@ -66,6 +72,7 @@ impl Component for MonitorModel {
|
||||
set_start_child=>k::Frame{
|
||||
add_css_class: "rb",
|
||||
set_margin_all: 5,
|
||||
#[name="widget_layer"]
|
||||
gtk::Overlay{
|
||||
#[wrap(Some)]
|
||||
set_child = &Render{
|
||||
@ -84,7 +91,10 @@ impl Component for MonitorModel {
|
||||
set_margin_all:10,
|
||||
set_valign: gtk::Align::Start,
|
||||
set_halign: gtk::Align::End,
|
||||
}
|
||||
},
|
||||
#[track = "model.changed(MonitorModel::new_layer())"]
|
||||
#[iterate]
|
||||
add_overlay: &model.widgets
|
||||
},
|
||||
|
||||
},
|
||||
@ -97,9 +107,22 @@ impl Component for MonitorModel {
|
||||
}
|
||||
|
||||
fn update(&mut self, message: Self::Input, sender: ComponentSender<Self>, root: &Self::Root) {
|
||||
self.reset();
|
||||
match message {
|
||||
MonitorInputMsg::AddLayer(layer) => {
|
||||
let need_prepare = { layer.get_prepare().lock().unwrap().is_some() };
|
||||
{
|
||||
let mut layers = self.layers.borrow_mut();
|
||||
if !layers.contains_key(layer.name.as_str()) {
|
||||
let mut widgets = layer.widgets.lock().unwrap();
|
||||
if widgets.is_some() {
|
||||
let ws = widgets.take().unwrap();
|
||||
ws.into_iter().for_each(|w| {
|
||||
sender.input(MonitorInputMsg::AddWidget(w));
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
if need_prepare {
|
||||
sender.oneshot_command(async move {
|
||||
let mut back = OffscreenRenderer::new(3000, 3000).unwrap();
|
||||
@ -118,14 +141,18 @@ impl Component for MonitorModel {
|
||||
MonitorCommand::NewLayer(layer)
|
||||
});
|
||||
} else {
|
||||
self.layers
|
||||
.borrow_mut()
|
||||
.get_mut(layer.name.as_str())
|
||||
.map(|v| *v = layer);
|
||||
sender
|
||||
.output_sender()
|
||||
.send(MonitorOutputMsg::LayerAdded(0))
|
||||
.unwrap();
|
||||
{
|
||||
let mut layers = self.layers.borrow_mut();
|
||||
if layers.contains_key(layer.name.as_str()) {
|
||||
let p = layers.get_mut(layer.name.as_str()).unwrap();
|
||||
*p = layer;
|
||||
} else {
|
||||
layers.insert(layer.name.clone(), layer);
|
||||
}
|
||||
}
|
||||
|
||||
let raw_id = self.get_new_layer();
|
||||
self.set_new_layer(*raw_id + 1);
|
||||
self.sidebar.sender().send(Msg::RefreshList);
|
||||
}
|
||||
}
|
||||
@ -143,6 +170,16 @@ impl Component for MonitorModel {
|
||||
.send(MonitorOutputMsg::LayerUpdated(0))
|
||||
.unwrap();
|
||||
}
|
||||
MonitorInputMsg::AddWidget(widget) => match widget.widget_type() {
|
||||
WidgetType::Cairo => {
|
||||
let frame = WidgetFrame::new();
|
||||
frame.set_widget(widget);
|
||||
self.widgets.push(frame);
|
||||
}
|
||||
WidgetType::OpenGl => {}
|
||||
_ => {}
|
||||
},
|
||||
MonitorInputMsg::RemoveWidget => {}
|
||||
MonitorInputMsg::None => {}
|
||||
}
|
||||
}
|
||||
@ -167,6 +204,7 @@ impl Component for MonitorModel {
|
||||
let model = MonitorModel {
|
||||
render_range: (4.0, 53.3, 73.3, 135.0),
|
||||
new_layer: 0,
|
||||
widgets: vec![],
|
||||
render_cfg,
|
||||
sidebar_open: true,
|
||||
sidebar_width: 400,
|
||||
@ -188,7 +226,6 @@ impl Component for MonitorModel {
|
||||
self.reset();
|
||||
match msg {
|
||||
MonitorCommand::NewLayer(layer) => {
|
||||
// self.layers.push(layer);
|
||||
self.layers.borrow_mut().insert(layer.name.clone(), layer);
|
||||
self.set_render_range((29.13, 30.16, 119.53, 121.13));
|
||||
self.sidebar.sender().send(Msg::RefreshList).unwrap();
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
pub mod dynamic_col;
|
||||
pub mod render;
|
||||
pub mod timeline;
|
||||
pub mod widget_frame;
|
||||
|
||||
pub use dynamic_col::*;
|
||||
pub use render::*;
|
||||
pub use timeline::*;
|
||||
pub use widget_frame::*;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
use super::super::{cms::CMS, Render};
|
||||
use crate::coords::Range;
|
||||
use crate::pipeline::offscreen_renderer::CanvasWrapper;
|
||||
use crate::{coords::Range, widgets::widget::Widget};
|
||||
use femtovg::{renderer::OpenGl, Canvas, ImageId};
|
||||
use std::{
|
||||
cell::{Ref, RefCell},
|
||||
@ -34,6 +34,7 @@ pub type LayerImplSync = Arc<Mutex<Box<dyn LayerImpl + Send + Sync>>>;
|
||||
pub struct Layer {
|
||||
pub visiable: bool,
|
||||
pub name: String,
|
||||
pub widgets: Arc<Mutex<Option<Vec<Box<dyn Widget>>>>>,
|
||||
target: Arc<Mutex<Option<Target>>>,
|
||||
prepare: PrepareFunc,
|
||||
imp: Option<Arc<Mutex<Box<dyn LayerImpl + Send + Sync>>>>,
|
||||
@ -62,6 +63,7 @@ impl Layer {
|
||||
>(
|
||||
visiable: bool,
|
||||
draw: F,
|
||||
widgets: Option<Vec<Box<dyn Widget>>>,
|
||||
layer_name: String,
|
||||
prepare: Option<PREPARE>,
|
||||
imp: Option<IMP>,
|
||||
@ -70,6 +72,7 @@ impl Layer {
|
||||
visiable,
|
||||
target: Arc::new(Mutex::new(None)),
|
||||
name: layer_name,
|
||||
widgets: Arc::new(Mutex::new(widgets)),
|
||||
prepare: Arc::new(Mutex::new(prepare.map(|p| {
|
||||
Box::new(move |a, b, c| p(a, b, c))
|
||||
as Box<
|
||||
|
||||
@ -7,21 +7,15 @@ pub trait ColorMapper<T: NumOps + PartialOrd + FromPrimitive + AsPrimitive<f64>>
|
||||
{
|
||||
fn map_value_to_color(&self, value: T, invalid: T) -> Option<femtovg::Color>;
|
||||
|
||||
fn map_min_to_max(&self, mut min: T, max: T, len: usize) -> Vec<femtovg::Color> {
|
||||
let step = (max - min).as_() / len as f64;
|
||||
let mut colors = Vec::new();
|
||||
while min <= max {
|
||||
colors.push(self.map_value_to_color(min, self.invalid()).unwrap());
|
||||
min = min + T::from_f64(step).unwrap();
|
||||
}
|
||||
colors
|
||||
}
|
||||
fn map_min_to_max(&self) -> Vec<femtovg::Color>;
|
||||
|
||||
fn labels(&self) -> Vec<String>;
|
||||
|
||||
fn min_max(&self) -> (T, T);
|
||||
fn invalid(&self) -> T;
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct BoundaryNorm<T: NumOps + PartialOrd> {
|
||||
boundaries: Vec<T>,
|
||||
extrand: bool,
|
||||
@ -106,4 +100,18 @@ where
|
||||
fn invalid(&self) -> T {
|
||||
self.invalid_value.clone()
|
||||
}
|
||||
|
||||
fn map_min_to_max(&self) -> Vec<femtovg::Color> {
|
||||
self.boundaries
|
||||
.iter()
|
||||
.map(|x| self.map_value_to_color(*x, self.invalid_value).unwrap())
|
||||
.collect()
|
||||
}
|
||||
|
||||
fn labels(&self) -> Vec<String> {
|
||||
self.boundaries
|
||||
.iter()
|
||||
.map(|x| format!("{:.2}", x.as_()))
|
||||
.collect()
|
||||
}
|
||||
}
|
||||
|
||||
@ -10,6 +10,7 @@ use std::sync::Mutex;
|
||||
use super::super::{
|
||||
cms::CMS, widget::Widget, Layer, LayerImpl, LayerImplSync, Render, Target, TargetType,
|
||||
};
|
||||
use super::widgets::ColorBar;
|
||||
use crate::data::{AsyncDataLoader, DataLoader, Radar2d};
|
||||
use crate::pipeline::offscreen_renderer::CanvasWrapper;
|
||||
use tokio::task;
|
||||
@ -33,7 +34,7 @@ impl Layer {
|
||||
+ Sync
|
||||
+ FromPrimitive
|
||||
+ AsPrimitive<f64>,
|
||||
CMAP: ColorMapper<T> + 'static,
|
||||
CMAP: ColorMapper<T> + 'static + Clone,
|
||||
{
|
||||
Self::new(
|
||||
true,
|
||||
@ -71,6 +72,12 @@ impl Layer {
|
||||
}
|
||||
}
|
||||
},
|
||||
Some(vec![Box::new(ColorBar::new(
|
||||
color_map.clone(),
|
||||
[5.0, 5.0, 5.0, 5.0],
|
||||
(80.0, 280.0),
|
||||
[0, 10, 50, 0],
|
||||
))]),
|
||||
layer_name,
|
||||
Some(
|
||||
move |renderer: LayerImplSync, c: Arc<Mutex<CanvasWrapper>>, cms: CMS| {
|
||||
@ -102,7 +109,7 @@ impl Layer {
|
||||
+ Send
|
||||
+ FromPrimitive
|
||||
+ AsPrimitive<f64>,
|
||||
CMAP: ColorMapper<T> + 'static,
|
||||
CMAP: ColorMapper<T> + 'static + Clone,
|
||||
LOADER: DataLoader<T, Radar2d<T>>,
|
||||
{
|
||||
let data = loader.load(path).unwrap();
|
||||
@ -127,7 +134,7 @@ impl Layer {
|
||||
+ Sync
|
||||
+ FromPrimitive
|
||||
+ AsPrimitive<f64>,
|
||||
CMAP: ColorMapper<T> + 'static,
|
||||
CMAP: ColorMapper<T> + 'static + Clone,
|
||||
LOADER: AsyncDataLoader<T, Radar2d<T>>,
|
||||
{
|
||||
let data = loader.load(path).await.unwrap();
|
||||
@ -135,16 +142,42 @@ impl Layer {
|
||||
}
|
||||
}
|
||||
|
||||
impl Layer {
|
||||
pub fn widget_layer<T: Widget + Send + Sync + Debug>(widget: T) -> Self {
|
||||
Self::new(
|
||||
true,
|
||||
|s, render, (w, h)| {
|
||||
let imp = s.get_imp().unwrap();
|
||||
},
|
||||
"widget".into(),
|
||||
None::<FnOnce(LayerImplSync, Arc<Mutex<CanvasWrapper>>, CMS) -> Target + Send + Sync + 'static>,
|
||||
Some(widget),
|
||||
)
|
||||
}
|
||||
}
|
||||
// impl Layer {
|
||||
// pub fn widget_layer<T: Widget + Send + Sync + Debug + 'static>(
|
||||
// widget: T,
|
||||
// visiable: bool,
|
||||
// ) -> Self {
|
||||
// Self::new(
|
||||
// visiable,
|
||||
// |s, render, (w, h)| {
|
||||
// let imp = s.get_imp().unwrap();
|
||||
// let mut canvas = render.get_canvas();
|
||||
// let canvas = canvas.as_mut().unwrap();
|
||||
// let cms = render.create_cms();
|
||||
// imp.lock().unwrap().draw(canvas, cms);
|
||||
// },
|
||||
// "widget".into(),
|
||||
// None::<
|
||||
// Box<
|
||||
// dyn FnOnce(LayerImplSync, Arc<Mutex<CanvasWrapper>>, CMS) -> Target
|
||||
// + Send
|
||||
// + Sync,
|
||||
// >,
|
||||
// >,
|
||||
// Some(widget),
|
||||
// )
|
||||
// }
|
||||
|
||||
// pub fn colorbar_layer<V, T>(
|
||||
// visiable: bool,
|
||||
// color_mapper: T,
|
||||
// padding: [f32; 4],
|
||||
// origin: (f32, f32),
|
||||
// ) -> Self
|
||||
// where
|
||||
// V: num_traits::NumOps + PartialOrd + FromPrimitive + AsPrimitive<f64> + Debug + Send + Sync,
|
||||
// T: ColorMapper<V> + 'static,
|
||||
// {
|
||||
// Self::widget_layer(ColorBar::new(color_mapper, padding, origin), visiable)
|
||||
// }
|
||||
// }
|
||||
|
||||
@ -1,8 +1,12 @@
|
||||
use super::{
|
||||
super::widget::{Widget as WidgetTrait, WidgetType},
|
||||
super::Layer,
|
||||
color_mapper::ColorMapper,
|
||||
};
|
||||
use crate::widgets::CMS;
|
||||
use femtovg::{renderer::OpenGl, Canvas, Color, Paint, Path};
|
||||
use num_traits::*;
|
||||
|
||||
use super::{super::widget::Widget as WidgetTrait, super::Layer, color_mapper::ColorMapper};
|
||||
#[derive(Debug)]
|
||||
pub struct ColorBar<V, T>
|
||||
where
|
||||
V: num_traits::NumOps + PartialOrd + FromPrimitive + AsPrimitive<f64>,
|
||||
@ -10,38 +14,91 @@ where
|
||||
{
|
||||
color_mapper: T,
|
||||
padding: [f32; 4],
|
||||
width: Option<f32>,
|
||||
height: Option<f32>,
|
||||
origin: (f32, f32),
|
||||
width: f32,
|
||||
height: f32,
|
||||
margin: [i32; 4],
|
||||
color_list: Vec<femtovg::Color>,
|
||||
phantom: std::marker::PhantomData<V>,
|
||||
}
|
||||
|
||||
impl<V, T> WidgetTrait for ColorBar<V, T>
|
||||
impl<V, T> ColorBar<V, T>
|
||||
where
|
||||
V: num_traits::NumOps + PartialOrd + FromPrimitive + AsPrimitive<f64>,
|
||||
T: ColorMapper<V>,
|
||||
{
|
||||
fn render(&self, canvas: &mut Canvas<OpenGl>, cms: CMS) {
|
||||
let (w, h) = (canvas.width(), canvas.height());
|
||||
let bar_width = self.width.unwrap_or(w as f32) - self.padding[1] - self.padding[3];
|
||||
let bar_height = self.height.unwrap_or(10.0);
|
||||
let (x, y) = self.origin;
|
||||
pub fn new(color_mapper: T, padding: [f32; 4], size: (f32, f32), margin: [i32; 4]) -> Self {
|
||||
let (l, ll) = color_mapper.min_max();
|
||||
let invalid = color_mapper.invalid();
|
||||
let colors = color_mapper.map_min_to_max();
|
||||
|
||||
let (l, ll) = self.color_mapper.min_max();
|
||||
let invalid = self.color_mapper.invalid();
|
||||
let colors = self.color_mapper.map_min_to_max(l, ll, 100);
|
||||
|
||||
let b_w = w as f32 / 100.0;
|
||||
for (i, color) in colors.into_iter().enumerate() {
|
||||
let x = x + i as f32 * b_w;
|
||||
let y = y;
|
||||
let w = b_w;
|
||||
let h = bar_height;
|
||||
|
||||
let mut path = Path::new();
|
||||
path.rect(x, y, w, h);
|
||||
let paint = Paint::color(color);
|
||||
canvas.fill_path(&path, &paint);
|
||||
Self {
|
||||
color_list: colors,
|
||||
color_mapper,
|
||||
padding,
|
||||
width: size.0,
|
||||
height: size.1,
|
||||
margin,
|
||||
phantom: std::marker::PhantomData,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<V, T> WidgetTrait for ColorBar<V, T>
|
||||
where
|
||||
V: num_traits::NumOps + PartialOrd + FromPrimitive + AsPrimitive<f64> + Send + Sync,
|
||||
T: ColorMapper<V> + 'static,
|
||||
{
|
||||
fn cairo_render(&self, canvas: &cairo::Context, w: f32, h: f32) {
|
||||
let bar_width = 10;
|
||||
let bar_height = h - self.padding[0] - self.padding[2];
|
||||
let (x, y) = (self.padding[3], self.padding[0]);
|
||||
let b_h = bar_height / self.color_list.len() as f32;
|
||||
|
||||
for ((i, color), label) in self
|
||||
.color_list
|
||||
.iter()
|
||||
.enumerate()
|
||||
.zip(self.color_mapper.labels())
|
||||
{
|
||||
let y = y + i as f32 * b_h;
|
||||
|
||||
canvas.set_source_rgba(
|
||||
color.r as f64,
|
||||
color.g as f64,
|
||||
color.b as f64,
|
||||
color.a as f64,
|
||||
);
|
||||
canvas.rectangle(x as f64, y as f64, bar_width as f64, b_h as f64);
|
||||
canvas.fill();
|
||||
|
||||
let extents = canvas.text_extents(&label).unwrap();
|
||||
|
||||
canvas.move_to(
|
||||
(x + bar_width as f32 + 5.0) as f64,
|
||||
y as f64 + extents.height() / 2.0 as f64,
|
||||
);
|
||||
canvas.set_source_rgba(1.0, 1.0, 1.0, 1.0);
|
||||
canvas.show_text(&label);
|
||||
}
|
||||
}
|
||||
|
||||
fn location(&self) -> (gtk::Align, gtk::Align) {
|
||||
(gtk::Align::End, gtk::Align::End)
|
||||
}
|
||||
|
||||
fn size(&self) -> (f32, f32) {
|
||||
(self.width, self.height)
|
||||
}
|
||||
|
||||
fn widget_type(&self) -> WidgetType {
|
||||
WidgetType::Cairo
|
||||
}
|
||||
|
||||
fn margin(&self) -> [i32; 4] {
|
||||
self.margin
|
||||
}
|
||||
|
||||
fn padding(&self) -> [i32; 4] {
|
||||
[10, 10, 10, 10]
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,3 +1,3 @@
|
||||
mod widget;
|
||||
|
||||
pub use widget::Widget;
|
||||
pub use widget::{Widget, WidgetType};
|
||||
|
||||
@ -1,14 +1,24 @@
|
||||
use crate::widgets::{Layer, LayerImpl, Render, CMS};
|
||||
use femtovg::{renderer::OpenGl, Canvas};
|
||||
use gtk::Align;
|
||||
use std::{fmt::Debug, rc::Rc};
|
||||
|
||||
pub trait Widget {
|
||||
fn render(&self, canvas: &mut Canvas<OpenGl>, cms: CMS);
|
||||
pub enum WidgetType {
|
||||
OpenGl,
|
||||
Cairo,
|
||||
Other,
|
||||
}
|
||||
|
||||
impl<T: Widget + Debug> LayerImpl for T {
|
||||
fn draw(&self, canvas: &mut Canvas<OpenGl>, cms: CMS) -> Option<crate::widgets::Target> {
|
||||
self.render( canvas, cms);
|
||||
None
|
||||
pub trait Widget: 'static + Send + Sync {
|
||||
fn opengl_render(&self, canvas: &mut Canvas<OpenGl>, cms: CMS) {}
|
||||
fn cairo_render(&self, canvas: &cairo::Context, w: f32, h: f32) {}
|
||||
fn widget_type(&self) -> WidgetType;
|
||||
|
||||
fn size(&self) -> (f32, f32);
|
||||
fn location(&self) -> (Align, Align);
|
||||
fn margin(&self) -> [i32; 4];
|
||||
|
||||
fn padding(&self) -> [i32; 4] {
|
||||
[20, 50, 20, 50]
|
||||
}
|
||||
}
|
||||
|
||||
@ -243,7 +243,11 @@ impl TimeLine {
|
||||
}
|
||||
pub fn set_selection(&self, selection: Option<Selection>) {
|
||||
self.imp().selection.replace(selection);
|
||||
self.imp().drawing_area.borrow().as_ref().map(|d| d.queue_draw());
|
||||
self.imp()
|
||||
.drawing_area
|
||||
.borrow()
|
||||
.as_ref()
|
||||
.map(|d| d.queue_draw());
|
||||
}
|
||||
|
||||
pub fn set_border_radius(&self) {}
|
||||
|
||||
60
src/widgets/widget_frame/imp.rs
Normal file
60
src/widgets/widget_frame/imp.rs
Normal file
@ -0,0 +1,60 @@
|
||||
use crate::widgets::widget::Widget;
|
||||
use chrono::{prelude::*, Duration};
|
||||
use gtk::glib::{self, prelude::*, ParamSpec, Properties, Property, Value};
|
||||
use gtk::prelude::*;
|
||||
use gtk::subclass::prelude::*;
|
||||
use std::cell::{Cell, RefCell};
|
||||
use std::rc::Rc;
|
||||
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
||||
pub enum Selection {
|
||||
Slice((DateTime<Utc>, DateTime<Utc>)),
|
||||
Point(DateTime<Utc>),
|
||||
}
|
||||
|
||||
// #[derive(Properties)]
|
||||
// #[properties(wrapper_type = super::WidgetFrame)]
|
||||
pub struct WidgetFrame {
|
||||
pub(super) drawing_area: RefCell<Option<gtk::DrawingArea>>,
|
||||
pub(super) height: Cell<u32>,
|
||||
pub(super) width: Cell<u32>,
|
||||
pub(super) widget: Rc<RefCell<Option<Box<dyn Widget>>>>,
|
||||
}
|
||||
|
||||
impl Default for WidgetFrame {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
drawing_area: RefCell::new(None),
|
||||
height: Cell::new(40),
|
||||
width: Cell::new(380),
|
||||
widget: Rc::new(RefCell::new(None)),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[glib::object_subclass]
|
||||
impl ObjectSubclass for WidgetFrame {
|
||||
const NAME: &'static str = "WidgetFrame";
|
||||
type Type = super::WidgetFrame;
|
||||
type ParentType = gtk::Widget;
|
||||
|
||||
fn class_init(klass: &mut Self::Class) {
|
||||
klass.set_layout_manager_type::<gtk::BoxLayout>();
|
||||
}
|
||||
}
|
||||
|
||||
impl ObjectImpl for WidgetFrame {
|
||||
// fn properties() -> &'static [ParamSpec] {
|
||||
// Self::derived_properties()
|
||||
// }
|
||||
|
||||
// fn set_property(&self, id: usize, value: &Value, pspec: &ParamSpec) {
|
||||
// Self::derived_set_property(&self, id, value, pspec);
|
||||
// }
|
||||
|
||||
// fn property(&self, id: usize, pspec: &ParamSpec) -> Value {
|
||||
// Self::derived_property(&self, id, pspec)
|
||||
// }
|
||||
}
|
||||
|
||||
impl WidgetImpl for WidgetFrame {}
|
||||
73
src/widgets/widget_frame/mod.rs
Normal file
73
src/widgets/widget_frame/mod.rs
Normal file
@ -0,0 +1,73 @@
|
||||
use self::widget::Widget;
|
||||
|
||||
pub use super::*;
|
||||
mod imp;
|
||||
use chrono::{prelude::*, DateTime, Duration, Utc};
|
||||
use glib::clone;
|
||||
pub use glib::subclass::prelude::*;
|
||||
use gtk::prelude::*;
|
||||
|
||||
glib::wrapper! {
|
||||
pub struct WidgetFrame(ObjectSubclass<imp::WidgetFrame>)
|
||||
@extends gtk::Widget;
|
||||
}
|
||||
|
||||
impl Default for WidgetFrame {
|
||||
fn default() -> Self {
|
||||
Self::new()
|
||||
}
|
||||
}
|
||||
|
||||
impl WidgetFrame {
|
||||
pub fn new() -> Self {
|
||||
let this: Self = glib::Object::new();
|
||||
let frame = gtk::Frame::new(None);
|
||||
frame.set_hexpand(true);
|
||||
frame.set_vexpand(true);
|
||||
let drawing_area = gtk::DrawingArea::new();
|
||||
let settings = gtk::Settings::default().unwrap();
|
||||
let prefers_dark_theme = settings.is_gtk_application_prefer_dark_theme();
|
||||
|
||||
frame.set_child(Some(&drawing_area));
|
||||
frame.set_parent(&this);
|
||||
this.imp().drawing_area.replace(Some(drawing_area));
|
||||
|
||||
this
|
||||
}
|
||||
|
||||
pub fn set_widget(&self, widget: Box<dyn Widget>) {
|
||||
self.imp().widget.replace(Some(widget));
|
||||
let drawing_area = self.imp().drawing_area.borrow();
|
||||
let drawing_area = drawing_area.as_ref().unwrap();
|
||||
let widget = self.imp().widget.clone();
|
||||
let widget_ref = widget.borrow();
|
||||
let widget_ref = widget_ref.as_ref().unwrap();
|
||||
let (w, h) = widget_ref.size();
|
||||
let margin = widget_ref.margin();
|
||||
let location = widget_ref.location();
|
||||
|
||||
self.set_halign(location.0);
|
||||
self.set_valign(location.1);
|
||||
self.set_margin_top(margin[0]);
|
||||
self.set_margin_bottom(margin[2]);
|
||||
self.set_margin_start(margin[3]);
|
||||
self.set_margin_end(margin[1]);
|
||||
self.set_width_request(w as i32);
|
||||
self.set_height_request(h as i32);
|
||||
|
||||
let padding = widget_ref.padding();
|
||||
|
||||
drawing_area.set_margin_top(padding[0]);
|
||||
drawing_area.set_margin_bottom(padding[2]);
|
||||
drawing_area.set_margin_start(padding[3]);
|
||||
drawing_area.set_margin_end(padding[1]);
|
||||
drawing_area.set_height_request(h as i32 - padding[0] - padding[2]);
|
||||
drawing_area.set_width_request(w as i32 - padding[1] - padding[3]);
|
||||
drawing_area.set_draw_func(clone!(@strong widget => move |_, canvas, x, y| {
|
||||
let widget = widget.borrow();
|
||||
let widget = widget.as_ref().unwrap();
|
||||
widget.cairo_render(canvas,x as f32,y as f32);
|
||||
}));
|
||||
drawing_area.queue_draw();
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user