sync
This commit is contained in:
parent
46b4e57eae
commit
7e536a562a
9
Cargo.lock
generated
9
Cargo.lock
generated
@ -506,6 +506,7 @@ dependencies = [
|
|||||||
"glue",
|
"glue",
|
||||||
"gtk4",
|
"gtk4",
|
||||||
"image",
|
"image",
|
||||||
|
"indexmap",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"libadwaita",
|
"libadwaita",
|
||||||
"libloading 0.8.0",
|
"libloading 0.8.0",
|
||||||
@ -1785,9 +1786,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hashbrown"
|
name = "hashbrown"
|
||||||
version = "0.14.0"
|
version = "0.14.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
|
checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "heapless"
|
name = "heapless"
|
||||||
@ -1894,9 +1895,9 @@ checksum = "b2cf49df1085dcfb171460e4592597b84abe50d900fb83efb6e41b20fefd6c2c"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "indexmap"
|
name = "indexmap"
|
||||||
version = "2.0.0"
|
version = "2.2.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
|
checksum = "824b2ae422412366ba479e8111fd301f7b5faece8149317bb81925979a53f520"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"equivalent",
|
"equivalent",
|
||||||
"hashbrown",
|
"hashbrown",
|
||||||
|
|||||||
@ -85,6 +85,7 @@ futures = "0.3.30"
|
|||||||
sorted-vec = "0.8.3"
|
sorted-vec = "0.8.3"
|
||||||
tracing = "0.1.40"
|
tracing = "0.1.40"
|
||||||
tracing-subscriber = "0.3.18"
|
tracing-subscriber = "0.3.18"
|
||||||
|
indexmap = "2.2.2"
|
||||||
|
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
|
|||||||
@ -39,6 +39,10 @@ impl Plugin for ETWSLoader {
|
|||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|b| {
|
.map(|b| {
|
||||||
let (dimension_len, data) = match b.data {
|
let (dimension_len, data) = match b.data {
|
||||||
|
ValueResult::I16(data) => (
|
||||||
|
data.len(),
|
||||||
|
radarg_plugin_interface::VecResult::I16(RVec::from(data)),
|
||||||
|
),
|
||||||
ValueResult::F32(data) => (
|
ValueResult::F32(data) => (
|
||||||
data.len(),
|
data.len(),
|
||||||
radarg_plugin_interface::VecResult::F32(RVec::from(data)),
|
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() {
|
let data_type = match b.info.value_name.as_str() {
|
||||||
"ET" => PluginResultType::ET,
|
"ET" => PluginResultType::ET,
|
||||||
|
"VIL" => PluginResultType::VIL,
|
||||||
|
"EB" => PluginResultType::EB,
|
||||||
"DBZ" => PluginResultType::DBZ,
|
"DBZ" => PluginResultType::DBZ,
|
||||||
"CR" => PluginResultType::DBZ,
|
"CR" => PluginResultType::DBZ,
|
||||||
"R" => PluginResultType::R,
|
"R" => PluginResultType::R,
|
||||||
@ -164,7 +170,7 @@ mod tests {
|
|||||||
|
|
||||||
fn test() {
|
fn test() {
|
||||||
let result =
|
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();
|
.unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,6 +18,7 @@ pub enum ValueResult {
|
|||||||
F64(Vec<f64>),
|
F64(Vec<f64>),
|
||||||
I32(Vec<i32>),
|
I32(Vec<i32>),
|
||||||
F32(Vec<f32>),
|
F32(Vec<f32>),
|
||||||
|
I16(Vec<i16>),
|
||||||
U64(Vec<u64>),
|
U64(Vec<u64>),
|
||||||
U32(Vec<u32>),
|
U32(Vec<u32>),
|
||||||
I8(Vec<i8>),
|
I8(Vec<i8>),
|
||||||
@ -31,6 +32,7 @@ enum ValueTypes {
|
|||||||
F32,
|
F32,
|
||||||
U64,
|
U64,
|
||||||
U32,
|
U32,
|
||||||
|
I16,
|
||||||
I8,
|
I8,
|
||||||
U8,
|
U8,
|
||||||
}
|
}
|
||||||
@ -46,6 +48,49 @@ pub struct Record {
|
|||||||
pub blocks: Vec<ParsedBlock>, // Fill in generic types appropriately
|
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 {
|
impl Record {
|
||||||
pub fn parse_from_path(path: impl AsRef<Path>) -> Result<Self, ETWSError> {
|
pub fn parse_from_path(path: impl AsRef<Path>) -> Result<Self, ETWSError> {
|
||||||
let path = path.as_ref();
|
let path = path.as_ref();
|
||||||
@ -215,6 +260,19 @@ impl Record {
|
|||||||
Ok((input, hlen))
|
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(
|
fn _parse_matrix(
|
||||||
input: &[u8],
|
input: &[u8],
|
||||||
type_: ValueTypes,
|
type_: ValueTypes,
|
||||||
@ -224,255 +282,65 @@ impl Record {
|
|||||||
scale: f32,
|
scale: f32,
|
||||||
fill_value: f64,
|
fill_value: f64,
|
||||||
) -> IResult<&[u8], ValueResult> {
|
) -> IResult<&[u8], ValueResult> {
|
||||||
use std::mem;
|
match_in_macro!(
|
||||||
let need_trans = offset != 0.0 || scale != 1.0;
|
type_,
|
||||||
let trans_to_bigger = offset.trunc() != offset || scale != 1.0;
|
len,
|
||||||
match type_ {
|
input,
|
||||||
ValueTypes::I64 => {
|
offset,
|
||||||
let ratio = mem::size_of::<i64>() / mem::size_of::<u8>();
|
scale,
|
||||||
let (input, result) = take(len * ratio)(input)?;
|
fill_value,
|
||||||
let result = unsafe {
|
(
|
||||||
let ptr = result.as_ptr() as *const i64;
|
ValueTypes::I64,
|
||||||
let slice = std::slice::from_raw_parts(ptr, len);
|
i64,
|
||||||
let slice = slice.to_vec();
|
f64,
|
||||||
|
ValueResult::I64,
|
||||||
if trans_to_bigger {
|
ValueResult::F64
|
||||||
let offset = offset as f32;
|
),
|
||||||
ValueResult::F32(
|
(
|
||||||
slice
|
ValueTypes::F64,
|
||||||
.into_iter()
|
f64,
|
||||||
.filter(|p| *p as f64 != fill_value)
|
f64,
|
||||||
.map(|p| p as f32 - offset / scale)
|
ValueResult::F64,
|
||||||
.collect::<Vec<f32>>(),
|
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 info: BlockJsonInfo,
|
||||||
pub data: ValueResult,
|
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_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":"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 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_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":"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_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":"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":"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_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":"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":"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/lib.rs:
|
||||||
src/error.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>),
|
I64(RVec<i64>),
|
||||||
F64(RVec<f64>),
|
F64(RVec<f64>),
|
||||||
I32(RVec<i32>),
|
I32(RVec<i32>),
|
||||||
|
I16(RVec<i16>),
|
||||||
F32(RVec<f32>),
|
F32(RVec<f32>),
|
||||||
U64(RVec<u64>),
|
U64(RVec<u64>),
|
||||||
U32(RVec<u32>),
|
U32(RVec<u32>),
|
||||||
|
|||||||
@ -1,8 +1,10 @@
|
|||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
|
|
||||||
use crate::widgets::render::Layer;
|
use crate::widgets::{render::Layer, widget::Widget};
|
||||||
|
|
||||||
pub enum MonitorInputMsg {
|
pub enum MonitorInputMsg {
|
||||||
|
AddWidget(Box<dyn Widget>),
|
||||||
|
RemoveWidget,
|
||||||
AddLayer(Layer),
|
AddLayer(Layer),
|
||||||
RemoveLayer(String),
|
RemoveLayer(String),
|
||||||
UpdateLayer((String, Box<dyn Fn(&mut Layer) + 'static>)),
|
UpdateLayer((String, Box<dyn Fn(&mut Layer) + 'static>)),
|
||||||
@ -16,6 +18,8 @@ impl Debug for MonitorInputMsg {
|
|||||||
MonitorInputMsg::RemoveLayer(_) => write!(f, "MonitorInputMsg::RemoveLayer"),
|
MonitorInputMsg::RemoveLayer(_) => write!(f, "MonitorInputMsg::RemoveLayer"),
|
||||||
MonitorInputMsg::UpdateLayer(_) => write!(f, "MonitorInputMsg::UpdateLayer"),
|
MonitorInputMsg::UpdateLayer(_) => write!(f, "MonitorInputMsg::UpdateLayer"),
|
||||||
MonitorInputMsg::None => write!(f, "MonitorInputMsg::None"),
|
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 super::messages::{MonitorInputMsg, MonitorOutputMsg};
|
||||||
use crate::pipeline::offscreen_renderer::OffscreenRenderer;
|
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::render::{RenderConfig, Target, CMS};
|
||||||
|
use crate::widgets::widget::{Widget, WidgetType};
|
||||||
|
use crate::widgets::WidgetFrame;
|
||||||
use crate::{
|
use crate::{
|
||||||
coords::{proj::Mercator, Mapper},
|
coords::{proj::Mercator, Mapper},
|
||||||
widgets::dynamic_col::DynamicCol,
|
widgets::dynamic_col::DynamicCol,
|
||||||
@ -29,6 +33,8 @@ pub struct MonitorModel {
|
|||||||
sidebar_width: i32,
|
sidebar_width: i32,
|
||||||
new_layer: i8,
|
new_layer: i8,
|
||||||
#[no_eq]
|
#[no_eq]
|
||||||
|
widgets: Vec<WidgetFrame>,
|
||||||
|
#[no_eq]
|
||||||
layers: Rc<RefCell<HashMap<String, Layer>>>,
|
layers: Rc<RefCell<HashMap<String, Layer>>>,
|
||||||
#[no_eq]
|
#[no_eq]
|
||||||
sidebar: Controller<SideBarModel>,
|
sidebar: Controller<SideBarModel>,
|
||||||
@ -66,6 +72,7 @@ impl Component for MonitorModel {
|
|||||||
set_start_child=>k::Frame{
|
set_start_child=>k::Frame{
|
||||||
add_css_class: "rb",
|
add_css_class: "rb",
|
||||||
set_margin_all: 5,
|
set_margin_all: 5,
|
||||||
|
#[name="widget_layer"]
|
||||||
gtk::Overlay{
|
gtk::Overlay{
|
||||||
#[wrap(Some)]
|
#[wrap(Some)]
|
||||||
set_child = &Render{
|
set_child = &Render{
|
||||||
@ -84,7 +91,10 @@ impl Component for MonitorModel {
|
|||||||
set_margin_all:10,
|
set_margin_all:10,
|
||||||
set_valign: gtk::Align::Start,
|
set_valign: gtk::Align::Start,
|
||||||
set_halign: gtk::Align::End,
|
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) {
|
fn update(&mut self, message: Self::Input, sender: ComponentSender<Self>, root: &Self::Root) {
|
||||||
|
self.reset();
|
||||||
match message {
|
match message {
|
||||||
MonitorInputMsg::AddLayer(layer) => {
|
MonitorInputMsg::AddLayer(layer) => {
|
||||||
let need_prepare = { layer.get_prepare().lock().unwrap().is_some() };
|
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 {
|
if need_prepare {
|
||||||
sender.oneshot_command(async move {
|
sender.oneshot_command(async move {
|
||||||
let mut back = OffscreenRenderer::new(3000, 3000).unwrap();
|
let mut back = OffscreenRenderer::new(3000, 3000).unwrap();
|
||||||
@ -118,14 +141,18 @@ impl Component for MonitorModel {
|
|||||||
MonitorCommand::NewLayer(layer)
|
MonitorCommand::NewLayer(layer)
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
self.layers
|
{
|
||||||
.borrow_mut()
|
let mut layers = self.layers.borrow_mut();
|
||||||
.get_mut(layer.name.as_str())
|
if layers.contains_key(layer.name.as_str()) {
|
||||||
.map(|v| *v = layer);
|
let p = layers.get_mut(layer.name.as_str()).unwrap();
|
||||||
sender
|
*p = layer;
|
||||||
.output_sender()
|
} else {
|
||||||
.send(MonitorOutputMsg::LayerAdded(0))
|
layers.insert(layer.name.clone(), layer);
|
||||||
.unwrap();
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let raw_id = self.get_new_layer();
|
||||||
|
self.set_new_layer(*raw_id + 1);
|
||||||
self.sidebar.sender().send(Msg::RefreshList);
|
self.sidebar.sender().send(Msg::RefreshList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -143,6 +170,16 @@ impl Component for MonitorModel {
|
|||||||
.send(MonitorOutputMsg::LayerUpdated(0))
|
.send(MonitorOutputMsg::LayerUpdated(0))
|
||||||
.unwrap();
|
.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 => {}
|
MonitorInputMsg::None => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -167,6 +204,7 @@ impl Component for MonitorModel {
|
|||||||
let model = MonitorModel {
|
let model = MonitorModel {
|
||||||
render_range: (4.0, 53.3, 73.3, 135.0),
|
render_range: (4.0, 53.3, 73.3, 135.0),
|
||||||
new_layer: 0,
|
new_layer: 0,
|
||||||
|
widgets: vec![],
|
||||||
render_cfg,
|
render_cfg,
|
||||||
sidebar_open: true,
|
sidebar_open: true,
|
||||||
sidebar_width: 400,
|
sidebar_width: 400,
|
||||||
@ -188,7 +226,6 @@ impl Component for MonitorModel {
|
|||||||
self.reset();
|
self.reset();
|
||||||
match msg {
|
match msg {
|
||||||
MonitorCommand::NewLayer(layer) => {
|
MonitorCommand::NewLayer(layer) => {
|
||||||
// self.layers.push(layer);
|
|
||||||
self.layers.borrow_mut().insert(layer.name.clone(), layer);
|
self.layers.borrow_mut().insert(layer.name.clone(), layer);
|
||||||
self.set_render_range((29.13, 30.16, 119.53, 121.13));
|
self.set_render_range((29.13, 30.16, 119.53, 121.13));
|
||||||
self.sidebar.sender().send(Msg::RefreshList).unwrap();
|
self.sidebar.sender().send(Msg::RefreshList).unwrap();
|
||||||
|
|||||||
@ -1,7 +1,9 @@
|
|||||||
pub mod dynamic_col;
|
pub mod dynamic_col;
|
||||||
pub mod render;
|
pub mod render;
|
||||||
pub mod timeline;
|
pub mod timeline;
|
||||||
|
pub mod widget_frame;
|
||||||
|
|
||||||
pub use dynamic_col::*;
|
pub use dynamic_col::*;
|
||||||
pub use render::*;
|
pub use render::*;
|
||||||
pub use timeline::*;
|
pub use timeline::*;
|
||||||
|
pub use widget_frame::*;
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
use super::super::{cms::CMS, Render};
|
use super::super::{cms::CMS, Render};
|
||||||
use crate::coords::Range;
|
|
||||||
use crate::pipeline::offscreen_renderer::CanvasWrapper;
|
use crate::pipeline::offscreen_renderer::CanvasWrapper;
|
||||||
|
use crate::{coords::Range, widgets::widget::Widget};
|
||||||
use femtovg::{renderer::OpenGl, Canvas, ImageId};
|
use femtovg::{renderer::OpenGl, Canvas, ImageId};
|
||||||
use std::{
|
use std::{
|
||||||
cell::{Ref, RefCell},
|
cell::{Ref, RefCell},
|
||||||
@ -34,6 +34,7 @@ pub type LayerImplSync = Arc<Mutex<Box<dyn LayerImpl + Send + Sync>>>;
|
|||||||
pub struct Layer {
|
pub struct Layer {
|
||||||
pub visiable: bool,
|
pub visiable: bool,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
|
pub widgets: Arc<Mutex<Option<Vec<Box<dyn Widget>>>>>,
|
||||||
target: Arc<Mutex<Option<Target>>>,
|
target: Arc<Mutex<Option<Target>>>,
|
||||||
prepare: PrepareFunc,
|
prepare: PrepareFunc,
|
||||||
imp: Option<Arc<Mutex<Box<dyn LayerImpl + Send + Sync>>>>,
|
imp: Option<Arc<Mutex<Box<dyn LayerImpl + Send + Sync>>>>,
|
||||||
@ -62,6 +63,7 @@ impl Layer {
|
|||||||
>(
|
>(
|
||||||
visiable: bool,
|
visiable: bool,
|
||||||
draw: F,
|
draw: F,
|
||||||
|
widgets: Option<Vec<Box<dyn Widget>>>,
|
||||||
layer_name: String,
|
layer_name: String,
|
||||||
prepare: Option<PREPARE>,
|
prepare: Option<PREPARE>,
|
||||||
imp: Option<IMP>,
|
imp: Option<IMP>,
|
||||||
@ -70,6 +72,7 @@ impl Layer {
|
|||||||
visiable,
|
visiable,
|
||||||
target: Arc::new(Mutex::new(None)),
|
target: Arc::new(Mutex::new(None)),
|
||||||
name: layer_name,
|
name: layer_name,
|
||||||
|
widgets: Arc::new(Mutex::new(widgets)),
|
||||||
prepare: Arc::new(Mutex::new(prepare.map(|p| {
|
prepare: Arc::new(Mutex::new(prepare.map(|p| {
|
||||||
Box::new(move |a, b, c| p(a, b, c))
|
Box::new(move |a, b, c| p(a, b, c))
|
||||||
as Box<
|
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_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> {
|
fn map_min_to_max(&self) -> Vec<femtovg::Color>;
|
||||||
let step = (max - min).as_() / len as f64;
|
|
||||||
let mut colors = Vec::new();
|
fn labels(&self) -> Vec<String>;
|
||||||
while min <= max {
|
|
||||||
colors.push(self.map_value_to_color(min, self.invalid()).unwrap());
|
|
||||||
min = min + T::from_f64(step).unwrap();
|
|
||||||
}
|
|
||||||
colors
|
|
||||||
}
|
|
||||||
|
|
||||||
fn min_max(&self) -> (T, T);
|
fn min_max(&self) -> (T, T);
|
||||||
fn invalid(&self) -> T;
|
fn invalid(&self) -> T;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct BoundaryNorm<T: NumOps + PartialOrd> {
|
pub struct BoundaryNorm<T: NumOps + PartialOrd> {
|
||||||
boundaries: Vec<T>,
|
boundaries: Vec<T>,
|
||||||
extrand: bool,
|
extrand: bool,
|
||||||
@ -106,4 +100,18 @@ where
|
|||||||
fn invalid(&self) -> T {
|
fn invalid(&self) -> T {
|
||||||
self.invalid_value.clone()
|
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::{
|
use super::super::{
|
||||||
cms::CMS, widget::Widget, Layer, LayerImpl, LayerImplSync, Render, Target, TargetType,
|
cms::CMS, widget::Widget, Layer, LayerImpl, LayerImplSync, Render, Target, TargetType,
|
||||||
};
|
};
|
||||||
|
use super::widgets::ColorBar;
|
||||||
use crate::data::{AsyncDataLoader, DataLoader, Radar2d};
|
use crate::data::{AsyncDataLoader, DataLoader, Radar2d};
|
||||||
use crate::pipeline::offscreen_renderer::CanvasWrapper;
|
use crate::pipeline::offscreen_renderer::CanvasWrapper;
|
||||||
use tokio::task;
|
use tokio::task;
|
||||||
@ -33,7 +34,7 @@ impl Layer {
|
|||||||
+ Sync
|
+ Sync
|
||||||
+ FromPrimitive
|
+ FromPrimitive
|
||||||
+ AsPrimitive<f64>,
|
+ AsPrimitive<f64>,
|
||||||
CMAP: ColorMapper<T> + 'static,
|
CMAP: ColorMapper<T> + 'static + Clone,
|
||||||
{
|
{
|
||||||
Self::new(
|
Self::new(
|
||||||
true,
|
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,
|
layer_name,
|
||||||
Some(
|
Some(
|
||||||
move |renderer: LayerImplSync, c: Arc<Mutex<CanvasWrapper>>, cms: CMS| {
|
move |renderer: LayerImplSync, c: Arc<Mutex<CanvasWrapper>>, cms: CMS| {
|
||||||
@ -102,7 +109,7 @@ impl Layer {
|
|||||||
+ Send
|
+ Send
|
||||||
+ FromPrimitive
|
+ FromPrimitive
|
||||||
+ AsPrimitive<f64>,
|
+ AsPrimitive<f64>,
|
||||||
CMAP: ColorMapper<T> + 'static,
|
CMAP: ColorMapper<T> + 'static + Clone,
|
||||||
LOADER: DataLoader<T, Radar2d<T>>,
|
LOADER: DataLoader<T, Radar2d<T>>,
|
||||||
{
|
{
|
||||||
let data = loader.load(path).unwrap();
|
let data = loader.load(path).unwrap();
|
||||||
@ -127,7 +134,7 @@ impl Layer {
|
|||||||
+ Sync
|
+ Sync
|
||||||
+ FromPrimitive
|
+ FromPrimitive
|
||||||
+ AsPrimitive<f64>,
|
+ AsPrimitive<f64>,
|
||||||
CMAP: ColorMapper<T> + 'static,
|
CMAP: ColorMapper<T> + 'static + Clone,
|
||||||
LOADER: AsyncDataLoader<T, Radar2d<T>>,
|
LOADER: AsyncDataLoader<T, Radar2d<T>>,
|
||||||
{
|
{
|
||||||
let data = loader.load(path).await.unwrap();
|
let data = loader.load(path).await.unwrap();
|
||||||
@ -135,16 +142,42 @@ impl Layer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Layer {
|
// impl Layer {
|
||||||
pub fn widget_layer<T: Widget + Send + Sync + Debug>(widget: T) -> Self {
|
// pub fn widget_layer<T: Widget + Send + Sync + Debug + 'static>(
|
||||||
Self::new(
|
// widget: T,
|
||||||
true,
|
// visiable: bool,
|
||||||
|s, render, (w, h)| {
|
// ) -> Self {
|
||||||
let imp = s.get_imp().unwrap();
|
// Self::new(
|
||||||
},
|
// visiable,
|
||||||
"widget".into(),
|
// |s, render, (w, h)| {
|
||||||
None::<FnOnce(LayerImplSync, Arc<Mutex<CanvasWrapper>>, CMS) -> Target + Send + Sync + 'static>,
|
// let imp = s.get_imp().unwrap();
|
||||||
Some(widget),
|
// 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 crate::widgets::CMS;
|
||||||
use femtovg::{renderer::OpenGl, Canvas, Color, Paint, Path};
|
use femtovg::{renderer::OpenGl, Canvas, Color, Paint, Path};
|
||||||
use num_traits::*;
|
use num_traits::*;
|
||||||
|
#[derive(Debug)]
|
||||||
use super::{super::widget::Widget as WidgetTrait, super::Layer, color_mapper::ColorMapper};
|
|
||||||
pub struct ColorBar<V, T>
|
pub struct ColorBar<V, T>
|
||||||
where
|
where
|
||||||
V: num_traits::NumOps + PartialOrd + FromPrimitive + AsPrimitive<f64>,
|
V: num_traits::NumOps + PartialOrd + FromPrimitive + AsPrimitive<f64>,
|
||||||
@ -10,38 +14,91 @@ where
|
|||||||
{
|
{
|
||||||
color_mapper: T,
|
color_mapper: T,
|
||||||
padding: [f32; 4],
|
padding: [f32; 4],
|
||||||
width: Option<f32>,
|
width: f32,
|
||||||
height: Option<f32>,
|
height: f32,
|
||||||
origin: (f32, f32),
|
margin: [i32; 4],
|
||||||
|
color_list: Vec<femtovg::Color>,
|
||||||
phantom: std::marker::PhantomData<V>,
|
phantom: std::marker::PhantomData<V>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<V, T> WidgetTrait for ColorBar<V, T>
|
impl<V, T> ColorBar<V, T>
|
||||||
where
|
where
|
||||||
V: num_traits::NumOps + PartialOrd + FromPrimitive + AsPrimitive<f64>,
|
V: num_traits::NumOps + PartialOrd + FromPrimitive + AsPrimitive<f64>,
|
||||||
T: ColorMapper<V>,
|
T: ColorMapper<V>,
|
||||||
{
|
{
|
||||||
fn render(&self, canvas: &mut Canvas<OpenGl>, cms: CMS) {
|
pub fn new(color_mapper: T, padding: [f32; 4], size: (f32, f32), margin: [i32; 4]) -> Self {
|
||||||
let (w, h) = (canvas.width(), canvas.height());
|
let (l, ll) = color_mapper.min_max();
|
||||||
let bar_width = self.width.unwrap_or(w as f32) - self.padding[1] - self.padding[3];
|
let invalid = color_mapper.invalid();
|
||||||
let bar_height = self.height.unwrap_or(10.0);
|
let colors = color_mapper.map_min_to_max();
|
||||||
let (x, y) = self.origin;
|
|
||||||
|
|
||||||
let (l, ll) = self.color_mapper.min_max();
|
Self {
|
||||||
let invalid = self.color_mapper.invalid();
|
color_list: colors,
|
||||||
let colors = self.color_mapper.map_min_to_max(l, ll, 100);
|
color_mapper,
|
||||||
|
padding,
|
||||||
let b_w = w as f32 / 100.0;
|
width: size.0,
|
||||||
for (i, color) in colors.into_iter().enumerate() {
|
height: size.1,
|
||||||
let x = x + i as f32 * b_w;
|
margin,
|
||||||
let y = y;
|
phantom: std::marker::PhantomData,
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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;
|
mod widget;
|
||||||
|
|
||||||
pub use widget::Widget;
|
pub use widget::{Widget, WidgetType};
|
||||||
|
|||||||
@ -1,14 +1,24 @@
|
|||||||
use crate::widgets::{Layer, LayerImpl, Render, CMS};
|
use crate::widgets::{Layer, LayerImpl, Render, CMS};
|
||||||
use femtovg::{renderer::OpenGl, Canvas};
|
use femtovg::{renderer::OpenGl, Canvas};
|
||||||
|
use gtk::Align;
|
||||||
use std::{fmt::Debug, rc::Rc};
|
use std::{fmt::Debug, rc::Rc};
|
||||||
|
|
||||||
pub trait Widget {
|
pub enum WidgetType {
|
||||||
fn render(&self, canvas: &mut Canvas<OpenGl>, cms: CMS);
|
OpenGl,
|
||||||
|
Cairo,
|
||||||
|
Other,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Widget + Debug> LayerImpl for T {
|
pub trait Widget: 'static + Send + Sync {
|
||||||
fn draw(&self, canvas: &mut Canvas<OpenGl>, cms: CMS) -> Option<crate::widgets::Target> {
|
fn opengl_render(&self, canvas: &mut Canvas<OpenGl>, cms: CMS) {}
|
||||||
self.render( canvas, cms);
|
fn cairo_render(&self, canvas: &cairo::Context, w: f32, h: f32) {}
|
||||||
None
|
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>) {
|
pub fn set_selection(&self, selection: Option<Selection>) {
|
||||||
self.imp().selection.replace(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) {}
|
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