rebuild
This commit is contained in:
parent
b900397992
commit
07f5e40b92
@ -112,7 +112,7 @@ impl Plugin for ETWSLoader {
|
||||
.into_iter()
|
||||
.map(|p| p as usize)
|
||||
.collect::<RVec<_>>(),
|
||||
datetime: RNone,
|
||||
datetime: record.filetime.timestamp(),
|
||||
dimensions: RVec::from(vec![RString::from("time")]),
|
||||
coord_type: c,
|
||||
dimension_values: RVec::from(
|
||||
@ -164,7 +164,7 @@ mod tests {
|
||||
|
||||
fn test() {
|
||||
let result =
|
||||
Record::parse_from_path("/Users/ruomu/Documents/ZJSXAA_20230627163200_FR.dat.gz")
|
||||
Record::parse_from_path("/Volumes/data2/RadarArray/HangZhou/radarData/OutputProducts/RadarProducts/BasicProductsX/20230822/20230822100400/ZJHZAA_20230822100400_CR.dat.gz")
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
use crate::error::ETWSError;
|
||||
use byteorder::{BigEndian, ByteOrder, LittleEndian};
|
||||
use chrono::{DateTime, Utc};
|
||||
use chrono::{DateTime, NaiveDateTime, Utc};
|
||||
use flate2::read::GzDecoder;
|
||||
use nom::{
|
||||
bytes::complete::{tag, take},
|
||||
@ -76,13 +76,10 @@ impl Record {
|
||||
let (_, parsed) =
|
||||
Self::_parse(binary_data.as_slice()).map_err(|_| anyhow::Error::msg("Parse error"))?;
|
||||
|
||||
Ok(Record {
|
||||
filetime: Utc::now(),
|
||||
blocks: parsed,
|
||||
})
|
||||
Ok(parsed)
|
||||
}
|
||||
|
||||
fn _parse(binary_data: &[u8]) -> IResult<&[u8], Vec<ParsedBlock>> {
|
||||
fn _parse(binary_data: &[u8]) -> IResult<&[u8], Record> {
|
||||
let start_tag = b"UNI_DATA";
|
||||
let (input, _) = tag(start_tag)(binary_data)?;
|
||||
let (input, order) = Self::_parse_split_fn(input, 8, 8, Self::_parse_order)?;
|
||||
@ -98,11 +95,14 @@ impl Record {
|
||||
Ok((input, p))
|
||||
})?;
|
||||
|
||||
|
||||
let (input, blocks) =
|
||||
count(Self::_parse_block_fn(order), record_info.block_num as usize)(input)?;
|
||||
|
||||
Ok((input, blocks))
|
||||
let data_time =
|
||||
NaiveDateTime::parse_from_str(&record_info.file_time, r"%Y%m%d%H%M%S").unwrap();
|
||||
let filetime = data_time.and_utc();
|
||||
|
||||
Ok((input, Record { filetime, blocks }))
|
||||
}
|
||||
|
||||
fn _parse_order(input: &[u8]) -> IResult<&[u8], Order> {
|
||||
|
||||
@ -1 +1 @@
|
||||
{"rustc_fingerprint":8475780184195034948,"outputs":{"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":""},"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":""}},"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":""},"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":{}}
|
||||
@ -0,0 +1 @@
|
||||
7f880159c4128aff
|
||||
@ -1 +1 @@
|
||||
{"rustc":2034204546556879275,"features":"[]","target":8454914719411586997,"profile":237655285757591511,"path":17523903030608720598,"deps":[[3470807962260834726,"serde",false,2576951082755195512],[6147374319788932929,"serde_json",false,11236813085233191832],[6644485573429891122,"thiserror",false,5126029546610645633],[6954241390595330609,"nom",false,14594257645800348529],[8926101378076943148,"byteorder",false,6152224339654054050],[8944703748776155531,"chrono",false,2759878786481602857],[10043922549268360936,"radarg_plugin_interface",false,8711709271969384688],[11138931377059941435,"num_traits",false,12000539450629646242],[12701726091060201577,"abi_stable",false,2020347370461875638],[12732307821348191974,"anyhow",false,6665578769121370250],[12935855096716563853,"flate2",false,1415421899538952416],[16098302879908240583,"nom_derive",false,5995471445394779106]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/etws_loader-826e392dbec97b5d/dep-lib-etws_loader"}}],"rustflags":[],"metadata":41698518999418921,"config":2202906307356721367,"compile_kind":0}
|
||||
{"rustc":17942353898403517573,"features":"[]","declared_features":"","target":8454914719411586997,"profile":14453530908159220714,"path":17523903030608720598,"deps":[[3470807962260834726,"serde",false,5495292221209974483],[6147374319788932929,"serde_json",false,17629184298793602400],[6644485573429891122,"thiserror",false,10413949152335566531],[6954241390595330609,"nom",false,9344036846249977496],[8926101378076943148,"byteorder",false,10139374136197577960],[8944703748776155531,"chrono",false,16322245435054934110],[10043922549268360936,"radarg_plugin_interface",false,16692653198501731083],[11138931377059941435,"num_traits",false,6726096067911681083],[12701726091060201577,"abi_stable",false,8790379237487676272],[12732307821348191974,"anyhow",false,17882246209481609850],[12935855096716563853,"flate2",false,425247165075559516],[16098302879908240583,"nom_derive",false,14241727609982393563]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/etws_loader-826e392dbec97b5d/dep-lib-etws_loader"}}],"rustflags":[],"metadata":41698518999418921,"config":2202906307356721367,"compile_kind":0}
|
||||
@ -1,5 +1,7 @@
|
||||
{"message":"unused imports: `Write`, `self`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":308,"byte_end":312,"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":320,"byte_end":325,"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":308,"byte_end":314,"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":318,"byte_end":325,"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: `external_types::crossbeam_channel::RSender`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/lib.rs","byte_start":69,"byte_end":111,"line_start":5,"line_end":5,"column_start":5,"column_end":47,"is_primary":true,"text":[{"text":" external_types::crossbeam_channel::RSender,","highlight_start":5,"highlight_end":47}],"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":63,"byte_end":111,"line_start":4,"line_end":5,"column_start":23,"column_end":47,"is_primary":true,"text":[{"text":" export_root_module,","highlight_start":23,"highlight_end":24},{"text":" external_types::crossbeam_channel::RSender,","highlight_start":1,"highlight_end":47}],"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: `external_types::crossbeam_channel::RSender`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lib.rs:5: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;12m5\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m external_types::crossbeam_channel::RSender,\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":4460,"byte_end":4465,"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":4460,"byte_end":4465,"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":6453,"byte_end":6458,"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":6453,"byte_end":6458,"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":1056,"byte_end":1069,"line_start":42,"line_end":42,"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":1056,"byte_end":1069,"line_start":42,"line_end":42,"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:42: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;12m42\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 imports: `Write`, `self`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":308,"byte_end":312,"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":320,"byte_end":325,"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":308,"byte_end":314,"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":318,"byte_end":325,"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":4545,"byte_end":4550,"line_start":155,"line_end":155,"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":4545,"byte_end":4550,"line_start":155,"line_end":155,"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:155: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;12m155\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":6538,"byte_end":6543,"line_start":223,"line_end":223,"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":6538,"byte_end":6543,"line_start":223,"line_end":223,"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:223: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;12m223\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":529,"byte_end":539,"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":546,"byte_end":549,"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":582,"byte_end":585,"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":"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/debug/deps/libetws_loader.dylib: src/lib.rs src/error.rs src/parser.rs
|
||||
/Users/tsuki/projects/radar-g/etws_loader/target/debug/deps/libetws_loader.dylib: src/lib.rs src/error.rs src/parser.rs
|
||||
|
||||
/Users/ruomu/projects/cinrad_g/etws_loader/target/debug/deps/libetws_loader.rlib: src/lib.rs src/error.rs src/parser.rs
|
||||
/Users/tsuki/projects/radar-g/etws_loader/target/debug/deps/libetws_loader.rlib: src/lib.rs src/error.rs src/parser.rs
|
||||
|
||||
/Users/ruomu/projects/cinrad_g/etws_loader/target/debug/deps/etws_loader.d: src/lib.rs src/error.rs src/parser.rs
|
||||
/Users/tsuki/projects/radar-g/etws_loader/target/debug/deps/etws_loader.d: src/lib.rs src/error.rs src/parser.rs
|
||||
|
||||
src/lib.rs:
|
||||
src/error.rs:
|
||||
|
||||
@ -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,6 +1,7 @@
|
||||
{"message":"unused imports: `Write`, `self`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":308,"byte_end":312,"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":320,"byte_end":325,"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":308,"byte_end":314,"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":318,"byte_end":325,"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 variable: `hlen2`","code":{"code":"unused_variables","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":4460,"byte_end":4465,"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":4460,"byte_end":4465,"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":6453,"byte_end":6458,"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":6453,"byte_end":6458,"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":529,"byte_end":539,"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":546,"byte_end":549,"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":582,"byte_end":585,"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":"5 warnings emitted","code":null,"level":"warning","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: 5 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":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: `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: `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":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":"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.
@ -95,7 +95,7 @@ pub struct Block {
|
||||
pub shape: DataShape,
|
||||
pub size: RVec<usize>,
|
||||
pub coord_type: CoordType,
|
||||
pub datetime: ROption<RString>,
|
||||
pub datetime: i64,
|
||||
pub dimensions: RVec<RString>,
|
||||
pub dimension_values: RVec<RVec<f64>>,
|
||||
pub fill_value: f64,
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
use crate::{
|
||||
coords::{proj::Mercator, Mapper},
|
||||
data::{self, CoordType, Radar2d},
|
||||
errors::RenderError,
|
||||
pipeline::{
|
||||
self,
|
||||
offscreen_renderer::OffscreenRenderer,
|
||||
pool::Pool,
|
||||
render_pipeline::RenderResult,
|
||||
@ -24,10 +26,11 @@ use super::{
|
||||
messages::MonitorInputMsg,
|
||||
monitor::MonitorModel,
|
||||
setting::SettingModel,
|
||||
TimelineMsg,
|
||||
ControlPanelOutputMsg, TimelineMsg,
|
||||
};
|
||||
use abi_stable::std_types::RStr;
|
||||
use chrono::{DateTime, Duration, Utc};
|
||||
use chrono::{prelude::*, DateTime, Duration, Utc};
|
||||
use futures::future::{try_join_all, BoxFuture};
|
||||
use gtk::{
|
||||
prelude::{ApplicationExt, BoxExt, GtkWindowExt, WidgetExt},
|
||||
traits::OrientableExt,
|
||||
@ -40,6 +43,7 @@ use relm4::{gtk, Component, ComponentParts, ComponentSender, RelmWidgetExt, Simp
|
||||
use relm4_components::open_dialog::{
|
||||
OpenDialog, OpenDialogMsg, OpenDialogResponse, OpenDialogSettings,
|
||||
};
|
||||
use smallvec::SmallVec;
|
||||
|
||||
relm4::new_action_group!(FileActionGroup, "file");
|
||||
relm4::new_stateless_action!(OpenAction, FileActionGroup, "open");
|
||||
@ -51,10 +55,12 @@ pub enum AppMsg {
|
||||
OpenDialog,
|
||||
OpenDialogMulti,
|
||||
OpenFile((DateTime<Utc>, Layer)),
|
||||
CheckTo((String, DateTime<Utc>)),
|
||||
}
|
||||
|
||||
pub struct AppModel {
|
||||
dispatcher: Arc<Mutex<Dispatcher>>,
|
||||
buffer: SmallVec<[RenderResult; 20]>,
|
||||
open_dialog: Controller<OpenDialog>,
|
||||
control: Controller<ControlPanelModel>,
|
||||
target_pipeline: HashMap<String, Pipeline>,
|
||||
@ -64,7 +70,7 @@ pub struct AppModel {
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum AppCommand {
|
||||
Prepare,
|
||||
PrepareFinished(Vec<Result<RenderResult, RenderError>>),
|
||||
}
|
||||
|
||||
#[relm4::component(pub)]
|
||||
@ -135,9 +141,12 @@ impl Component for AppModel {
|
||||
root: &Self::Root,
|
||||
sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
let control = ControlPanelModel::builder()
|
||||
.launch(0)
|
||||
.forward(sender.input_sender(), |msg| AppMsg::Close);
|
||||
let control = ControlPanelModel::builder().launch(0).forward(
|
||||
sender.input_sender(),
|
||||
|msg| match msg {
|
||||
ControlPanelOutputMsg::OpenFile((key, time)) => AppMsg::CheckTo((key, time)),
|
||||
},
|
||||
);
|
||||
|
||||
let render = MonitorModel::builder()
|
||||
.launch(())
|
||||
@ -169,11 +178,12 @@ impl Component for AppModel {
|
||||
|
||||
path_format.insert(
|
||||
format!("DBZ"),
|
||||
format!("/Volumes/data2/RadarArray/HangZhou/radarData/OutputProducts/RadarProducts/BasicProductsX/%Y%m%d/%Y%m%d%H%M%S"),
|
||||
format!("/Volumes/data2/RadarArray/HangZhou/radarData/OutputProducts/RadarProducts/BasicProductsX/%Y%m%d/%Y%m%d%H%M%S/ZJHZAA_%Y%m%d%H%M%S_ET.dat.gz"),
|
||||
);
|
||||
dispatcher.set_path_format(path_format);
|
||||
|
||||
let model = AppModel {
|
||||
buffer: SmallVec::new(),
|
||||
dispatcher: Arc::new(Mutex::new(dispatcher)),
|
||||
open_dialog: dialog,
|
||||
target_pipeline: HashMap::new(),
|
||||
@ -228,15 +238,21 @@ impl Component for AppModel {
|
||||
fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>, root: &Self::Root) {
|
||||
match msg {
|
||||
AppMsg::OpenFile((time, layer)) => {
|
||||
self.dispatcher.lock().unwrap().set_current_time(time);
|
||||
if !self.target_pipeline.contains_key(&layer.name) {
|
||||
let mut pipeline = Pipeline::new(10, layer.name.clone());
|
||||
pipeline.set_dispatcher(self.dispatcher.clone());
|
||||
self.target_pipeline.insert(layer.name.clone(), pipeline);
|
||||
}
|
||||
let mut pipeline = self.target_pipeline.get_mut(&layer.name).unwrap();
|
||||
pipeline.set_current(time, true);
|
||||
|
||||
let pipeline = {
|
||||
let pipeline = self.target_pipeline.get_mut(&layer.name).unwrap();
|
||||
pipeline.set_current(time, true);
|
||||
pipeline
|
||||
};
|
||||
let worker = Pipeline::run(pipeline);
|
||||
_sender.oneshot_command(async move {
|
||||
let results = worker.await;
|
||||
AppCommand::PrepareFinished(results)
|
||||
});
|
||||
self.render.sender().emit(MonitorInputMsg::AddLayer(layer));
|
||||
self.control
|
||||
.sender()
|
||||
@ -252,9 +268,75 @@ impl Component for AppModel {
|
||||
AppMsg::OpenDialog => {
|
||||
self.open_dialog.emit(OpenDialogMsg::Open);
|
||||
}
|
||||
AppMsg::CheckTo((key, datetime)) => {
|
||||
use std::iter::Iterator;
|
||||
println!("check to: {}", datetime);
|
||||
let layer = self
|
||||
.buffer
|
||||
.iter()
|
||||
.position(|r: &RenderResult| r.time() == datetime);
|
||||
print!("layer: {:?}\n", layer);
|
||||
for r in self.buffer.iter() {
|
||||
print!("{} ", r.time());
|
||||
}
|
||||
if let Some(layer) = layer {
|
||||
let layer = self.buffer.get(layer).unwrap().clone();
|
||||
self.render.sender().emit(MonitorInputMsg::RemoveLayer(0));
|
||||
self.render
|
||||
.sender()
|
||||
.emit(MonitorInputMsg::AddLayer(layer.layer));
|
||||
}
|
||||
}
|
||||
AppMsg::OpenDialogMulti => {}
|
||||
}
|
||||
}
|
||||
|
||||
fn update_cmd_with_view(
|
||||
&mut self,
|
||||
widgets: &mut Self::Widgets,
|
||||
message: Self::CommandOutput,
|
||||
sender: ComponentSender<Self>,
|
||||
root: &Self::Root,
|
||||
) {
|
||||
match message {
|
||||
AppCommand::PrepareFinished(mut v) => {
|
||||
let sorted = v.sort_by_key(|r| {
|
||||
if let Ok(result) = r.as_ref() {
|
||||
result.timestamp()
|
||||
} else {
|
||||
0
|
||||
}
|
||||
});
|
||||
let v = v.into_iter().filter(|p| p.is_ok()).map(|p| p.unwrap());
|
||||
self.buffer.extend(v);
|
||||
println!("buffer size: {}", self.buffer.len());
|
||||
|
||||
let thumbs = self
|
||||
.buffer
|
||||
.iter()
|
||||
.map(|r| {
|
||||
let datetime = r.time();
|
||||
let layer = r.layer.clone();
|
||||
|
||||
let c = {
|
||||
let layer = layer.render_target();
|
||||
let target = layer.lock().unwrap();
|
||||
let c = target.as_ref().map(|p| p.thumbnail.clone()).flatten();
|
||||
c
|
||||
};
|
||||
|
||||
(c, datetime)
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
for i in self.buffer.iter() {
|
||||
println!("{} ", i.time());
|
||||
}
|
||||
|
||||
self.control.emit(ControlPanelInputMsg::SetThumb(thumbs))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
macro_rules! match_in_macro {
|
||||
@ -263,9 +345,10 @@ macro_rules! match_in_macro {
|
||||
match $block.data_type {
|
||||
$(
|
||||
$branch => {
|
||||
let datetime = Utc.timestamp_opt($block.datetime,0).unwrap();
|
||||
let data: $t = $block.into();
|
||||
let layer = Layer::grid_render_layer(data, format!($name), $color);
|
||||
AppMsg::OpenFile((Utc::now() ,layer))
|
||||
AppMsg::OpenFile((datetime ,layer))
|
||||
},
|
||||
)+
|
||||
_ => AppMsg::Close,
|
||||
|
||||
@ -170,6 +170,7 @@ impl SimpleComponent for ControlPanelModel {
|
||||
|
||||
gtk::ScrolledWindow{
|
||||
set_height_request: 75,
|
||||
set_max_content_height: 75,
|
||||
#[local_ref]
|
||||
my_view -> gtk::ListView{
|
||||
add_css_class: "lv",
|
||||
@ -238,13 +239,31 @@ impl SimpleComponent for ControlPanelModel {
|
||||
ControlPanelInputMsg::SelectionRewind => {
|
||||
let current = self.get_selection().clone();
|
||||
if let Some(current) = current {
|
||||
self.set_selection(Some(current - Duration::minutes(12)));
|
||||
self.set_selection(Some(current - Duration::minutes(1)));
|
||||
_sender.output(ControlPanelOutputMsg::OpenFile((
|
||||
format!("DBZ"),
|
||||
current - Duration::minutes(1),
|
||||
)));
|
||||
}
|
||||
}
|
||||
ControlPanelInputMsg::SelectionFastForward => {
|
||||
let current = self.get_selection().clone();
|
||||
if let Some(current) = current {
|
||||
self.set_selection(Some(current + Duration::minutes(12)));
|
||||
self.set_selection(Some(current + Duration::minutes(1)));
|
||||
_sender.output(ControlPanelOutputMsg::OpenFile((
|
||||
format!("DBZ"),
|
||||
current + Duration::minutes(1),
|
||||
)));
|
||||
}
|
||||
}
|
||||
|
||||
ControlPanelInputMsg::SetThumb(v) => {
|
||||
for (texture, t) in v {
|
||||
self.list_img_wrapper.append(ImgItem {
|
||||
time: t.to_string(),
|
||||
img: texture,
|
||||
visiable: true,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -282,6 +301,8 @@ impl RelmListItem for ImgItem {
|
||||
set_width_request: 100,
|
||||
gtk::Box{
|
||||
set_margin_all:2,
|
||||
set_hexpand:true,
|
||||
set_vexpand:true,
|
||||
#[name = "img"]
|
||||
gtk::Image{}
|
||||
}
|
||||
@ -293,5 +314,6 @@ impl RelmListItem for ImgItem {
|
||||
|
||||
fn bind(&mut self, widgets: &mut Self::Widgets, _root: &mut Self::Root) {
|
||||
let Widgets { img } = widgets;
|
||||
img.set_paintable(self.img.as_ref());
|
||||
}
|
||||
}
|
||||
|
||||
@ -11,9 +11,12 @@ pub enum TimelineMsg {
|
||||
pub enum ControlPanelInputMsg {
|
||||
TimeLine(TimelineMsg),
|
||||
Selection(Option<DateTime<Utc>>),
|
||||
SetThumb(Vec<(Option<gtk::gdk::Texture>, DateTime<Utc>)>),
|
||||
SelectionRewind,
|
||||
SelectionFastForward,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum ControlPanelOutputMsg {}
|
||||
pub enum ControlPanelOutputMsg {
|
||||
OpenFile((String, DateTime<Utc>)),
|
||||
}
|
||||
|
||||
@ -93,41 +93,44 @@ impl Component for MonitorModel {
|
||||
match message {
|
||||
MonitorInputMsg::AddLayer(layer) => {
|
||||
// let mut canvas = OFFSCREEN.lock().unwrap();
|
||||
sender.oneshot_command(async move {
|
||||
let mut back = OffscreenRenderer::new(3000, 3000).unwrap();
|
||||
let canvas = back.create_canvas();
|
||||
// let new_canvas = OffscreenRenderer::new().unwrap();
|
||||
let f = {
|
||||
let p = layer.get_prepare();
|
||||
let mut _p = p.lock().unwrap();
|
||||
_p.take()
|
||||
};
|
||||
let target = if let Some(f) = f {
|
||||
let imp = layer.get_imp().unwrap();
|
||||
if layer.get_imp().is_some() {
|
||||
sender.oneshot_command(async move {
|
||||
let mut back = OffscreenRenderer::new(3000, 3000).unwrap();
|
||||
let canvas = back.create_canvas();
|
||||
// let new_canvas = OffscreenRenderer::new().unwrap();
|
||||
let f = {
|
||||
let p = layer.get_prepare();
|
||||
let mut _p = p.lock().unwrap();
|
||||
_p.take()
|
||||
};
|
||||
let target = if let Some(f) = f {
|
||||
let imp = layer.get_imp().unwrap();
|
||||
|
||||
let map: Mapper = Mercator::default().into();
|
||||
let cms = CMS::new(map, (3000.0, 3000.0));
|
||||
let canvas = Arc::new(Mutex::new(canvas));
|
||||
let c = f(imp, canvas, cms).await;
|
||||
Some(c)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
let map: Mapper = Mercator::default().into();
|
||||
let cms = CMS::new(map, (3000.0, 3000.0));
|
||||
let canvas = Arc::new(Mutex::new(canvas));
|
||||
let c = f(imp, canvas, cms);
|
||||
Some(c)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
if let Some(target) = target {
|
||||
layer.set_render_target(target);
|
||||
}
|
||||
MonitorCommand::NewLayer(layer)
|
||||
});
|
||||
if let Some(target) = target {
|
||||
layer.set_render_target(target);
|
||||
}
|
||||
MonitorCommand::NewLayer(layer)
|
||||
});
|
||||
} else {
|
||||
self.layers.push(layer);
|
||||
sender
|
||||
.output_sender()
|
||||
.send(MonitorOutputMsg::LayerAdded(0))
|
||||
.unwrap();
|
||||
|
||||
sender
|
||||
.output_sender()
|
||||
.send(MonitorOutputMsg::LayerAdded(0))
|
||||
.unwrap();
|
||||
|
||||
self.sidebar
|
||||
.sender()
|
||||
.send(Msg::RefreshList(self.layers.clone()));
|
||||
self.sidebar
|
||||
.sender()
|
||||
.send(Msg::RefreshList(self.layers.clone()));
|
||||
}
|
||||
}
|
||||
MonitorInputMsg::RemoveLayer(index) => {
|
||||
self.layers.remove(index);
|
||||
|
||||
@ -1,3 +1,5 @@
|
||||
use crate::widgets::Target;
|
||||
|
||||
use super::utils::*;
|
||||
use euclid::Size2D;
|
||||
use femtovg::{renderer::OpenGl, Canvas};
|
||||
@ -99,6 +101,8 @@ impl OffscreenRenderer {
|
||||
CanvasWrapper::new(canvas)
|
||||
}
|
||||
|
||||
pub fn get_img(&self, target: Target) {}
|
||||
|
||||
pub fn get_mem_img(&self) -> Vec<u8> {
|
||||
let (w, h) = self.size;
|
||||
let mut pixels: Vec<u8> = vec![0; w as usize * h as usize * 4];
|
||||
@ -126,6 +130,7 @@ impl Drop for OffscreenRenderer {
|
||||
let mut context = self.context.write().unwrap();
|
||||
self.device.destroy_context(&mut context).unwrap();
|
||||
let _ = self;
|
||||
println!("OffscreenRenderer dropped");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -4,13 +4,19 @@ use std::collections::VecDeque;
|
||||
|
||||
type PResult<T> = Result<T, PoolError>;
|
||||
|
||||
pub struct Pool<T> {
|
||||
pub struct Pool<T>
|
||||
where
|
||||
T: Send + Sync,
|
||||
{
|
||||
items: VecDeque<(i64, T)>,
|
||||
current: Option<(i64, usize)>,
|
||||
len: usize,
|
||||
}
|
||||
|
||||
impl<T> Pool<T> {
|
||||
impl<T> Pool<T>
|
||||
where
|
||||
T: Send + Sync,
|
||||
{
|
||||
pub fn new(len: usize) -> Self {
|
||||
Pool {
|
||||
items: VecDeque::new(),
|
||||
|
||||
@ -2,37 +2,36 @@ use chrono::prelude::*;
|
||||
use femtovg::{renderer::OpenGl, Canvas, ImageId};
|
||||
use std::sync::{Arc, Mutex};
|
||||
|
||||
use crate::widgets::{Target, TargetType};
|
||||
use crate::widgets::{Layer, Target, TargetType};
|
||||
|
||||
use super::offscreen_renderer::CanvasWrapper;
|
||||
|
||||
#[derive(Clone)]
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct RenderResult {
|
||||
canvas: Arc<Mutex<CanvasWrapper>>,
|
||||
img: Target,
|
||||
pub layer: Layer,
|
||||
time: DateTime<Utc>,
|
||||
}
|
||||
|
||||
impl Drop for RenderResult {
|
||||
fn drop(&mut self) {
|
||||
let mut canvas = self.canvas.lock().unwrap();
|
||||
if let TargetType::ImageId(img) = self.img.target {
|
||||
canvas.delete_image(img);
|
||||
}
|
||||
let _ = self;
|
||||
}
|
||||
}
|
||||
// impl Drop for RenderResult {
|
||||
// fn drop(&mut self) {
|
||||
// let mut canvas = self.canvas.lock().unwrap();
|
||||
// if let TargetType::ImageId(img) = self.img.target {
|
||||
// canvas.delete_image(img);
|
||||
// }
|
||||
// let _ = self;
|
||||
// }
|
||||
// }
|
||||
|
||||
impl RenderResult {
|
||||
pub fn new(canvas: Arc<Mutex<CanvasWrapper>>, img: Target, time: DateTime<Utc>) -> Self {
|
||||
Self { canvas, img, time }
|
||||
pub fn new(layer: Layer, time: DateTime<Utc>) -> Self {
|
||||
Self { layer, time }
|
||||
}
|
||||
|
||||
pub fn timestamp(&self) -> i64 {
|
||||
self.time.timestamp()
|
||||
}
|
||||
|
||||
pub fn target(&self) -> Target {
|
||||
self.img.clone()
|
||||
pub fn time(&self) -> DateTime<Utc> {
|
||||
self.time
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,13 +2,14 @@ use super::render_pipeline::RenderResult;
|
||||
use super::{offscreen_renderer::OffscreenRenderer, pool::Pool};
|
||||
use crate::coords::proj::Mercator;
|
||||
use crate::coords::Mapper;
|
||||
use crate::widgets::CMS;
|
||||
use crate::widgets::{Render, Target, TargetType, CMS};
|
||||
use crate::{data::Radar2d, errors::RenderError, widgets::Layer, PLUGIN_MANAGER};
|
||||
use chrono::{prelude::*, Duration};
|
||||
use futures::future::*;
|
||||
use radarg_plugin_interface::*;
|
||||
use regex::Regex;
|
||||
use smallvec::SmallVec;
|
||||
use std::sync::Mutex;
|
||||
use std::{
|
||||
borrow::Borrow,
|
||||
collections::{HashMap, VecDeque},
|
||||
@ -17,7 +18,8 @@ use std::{
|
||||
pin::Pin,
|
||||
sync::Arc,
|
||||
};
|
||||
use tokio::sync::{oneshot, Mutex};
|
||||
use tokio::sync::oneshot;
|
||||
use tokio::task;
|
||||
|
||||
pub fn ck() {
|
||||
unsafe {
|
||||
@ -26,9 +28,9 @@ pub fn ck() {
|
||||
}
|
||||
|
||||
pub struct Pipeline {
|
||||
pool: Vec<Pin<Box<dyn Future<Output = Result<RenderResult, RenderError>>>>>,
|
||||
pool: Option<Vec<BoxFuture<'static, Result<RenderResult, RenderError>>>>,
|
||||
switcher: Pool<oneshot::Receiver<i32>>,
|
||||
results: Mutex<SmallVec<[RenderResult; 20]>>,
|
||||
results: SmallVec<[RenderResult; 20]>,
|
||||
dispatcher: Option<Arc<std::sync::Mutex<Dispatcher>>>,
|
||||
handlers: Option<oneshot::Receiver<i32>>,
|
||||
key: String,
|
||||
@ -37,9 +39,9 @@ pub struct Pipeline {
|
||||
impl Pipeline {
|
||||
pub fn new(len: usize, key: String) -> Self {
|
||||
Self {
|
||||
pool: Vec::new(),
|
||||
pool: Some(Vec::new()),
|
||||
switcher: Pool::new(len),
|
||||
results: Mutex::new(SmallVec::new()),
|
||||
results: SmallVec::new(),
|
||||
dispatcher: None,
|
||||
handlers: None,
|
||||
key,
|
||||
@ -50,19 +52,6 @@ impl Pipeline {
|
||||
self.dispatcher = Some(dispatcher);
|
||||
}
|
||||
|
||||
pub async fn run(&mut self) {
|
||||
let (mut tx, rx) = oneshot::channel::<i32>();
|
||||
self.handlers = Some(rx);
|
||||
|
||||
let result = tokio::select! {
|
||||
res = try_join_all(&mut self.pool) => res,
|
||||
_ = tx.closed() => {
|
||||
self.handlers = None;
|
||||
Err(RenderError::Canceled)
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
pub fn set_current(&mut self, current_time: DateTime<Utc>, check_existed: bool) {
|
||||
if let Some(mut rx) = self.handlers.take() {
|
||||
rx.close();
|
||||
@ -73,64 +62,95 @@ impl Pipeline {
|
||||
|
||||
if let Some(paths) = paths {
|
||||
for (path, datetime) in paths.into_iter() {
|
||||
let future_task = async move {
|
||||
let loader = PLUGIN_MANAGER.get_plugin_by_name("etws_loader").unwrap();
|
||||
let mut loaded_data = loader.load(path.as_str().into()).unwrap();
|
||||
let first_block = loaded_data.blocks.pop().unwrap();
|
||||
if let Some((_, layer)) = data_to_layer(first_block) {
|
||||
let mut offscreen_renderer = OffscreenRenderer::new(3000, 3000).unwrap();
|
||||
let canvas_wrapper = offscreen_renderer.create_canvas();
|
||||
|
||||
let canvas_mutex =
|
||||
std::sync::Arc::new(std::sync::Mutex::new(canvas_wrapper));
|
||||
|
||||
let f = {
|
||||
let p = layer.get_prepare();
|
||||
let mut _p = p.lock().unwrap();
|
||||
_p.take()
|
||||
};
|
||||
|
||||
let target = if let Some(f) = f {
|
||||
let imp = layer.get_imp().unwrap();
|
||||
let map: Mapper = Mercator::default().into();
|
||||
let cms = CMS::new(map, (3000.0, 3000.0));
|
||||
let canvas = canvas_mutex.clone();
|
||||
let c = f(imp, canvas, cms).await;
|
||||
Some(c)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
Ok(RenderResult::new(canvas_mutex, target.unwrap(), datetime))
|
||||
} else {
|
||||
Err(RenderError::None)
|
||||
}
|
||||
};
|
||||
self.add_task(datetime.timestamp(), future_task);
|
||||
// self.add_task(datetime.timestamp(), future_task);
|
||||
self.add_task(datetime.timestamp(), self.worker(datetime, path));
|
||||
}
|
||||
}
|
||||
|
||||
println!("task len: {}", self.pool.as_ref().unwrap().len());
|
||||
}
|
||||
|
||||
fn worker(
|
||||
&self,
|
||||
datetime: DateTime<Utc>,
|
||||
path: impl AsRef<str> + Send + 'static,
|
||||
) -> BoxFuture<'static, Result<RenderResult, RenderError>> {
|
||||
Box::pin(async move {
|
||||
let loader = PLUGIN_MANAGER.get_plugin_by_name("etws_loader").unwrap();
|
||||
let mut loaded_data = loader.load(path.as_ref().into()).unwrap();
|
||||
let first_block = loaded_data.blocks.pop().unwrap();
|
||||
if let Some((_, layer)) = data_to_layer(first_block) {
|
||||
let handle = task::spawn_blocking(move || {
|
||||
let mut offscreen_renderer = OffscreenRenderer::new(3000, 3000).unwrap();
|
||||
let canvas_wrapper = offscreen_renderer.create_canvas();
|
||||
let canvas_mutex = std::sync::Arc::new(std::sync::Mutex::new(canvas_wrapper));
|
||||
|
||||
let f = {
|
||||
let p = layer.get_prepare();
|
||||
let mut _p = p.lock().unwrap();
|
||||
_p.take()
|
||||
};
|
||||
|
||||
let target = if let Some(f) = f {
|
||||
let imp = layer.get_imp().unwrap();
|
||||
let map: Mapper = Mercator::default().into();
|
||||
let cms = CMS::new(map, (3000.0, 3000.0));
|
||||
let canvas = canvas_mutex.clone();
|
||||
let c = f(imp, canvas.clone(), cms);
|
||||
let canvas = canvas.lock().unwrap();
|
||||
Some(c)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
layer.set_render_target(target.unwrap());
|
||||
layer
|
||||
});
|
||||
|
||||
let target = handle.await.unwrap();
|
||||
|
||||
Ok(RenderResult::new(target, datetime))
|
||||
} else {
|
||||
println!("no layer");
|
||||
Err(RenderError::None)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
pub fn add_task<TASK>(&mut self, timestamp: i64, task: TASK)
|
||||
where
|
||||
TASK: Future<Output = Result<RenderResult, RenderError>> + 'static,
|
||||
TASK: Future<Output = Result<RenderResult, RenderError>> + 'static + Send,
|
||||
{
|
||||
let (mut tx, rx) = oneshot::channel::<i32>();
|
||||
|
||||
let future = async move {
|
||||
tokio::select! {
|
||||
res = task => res,
|
||||
_ = tx.closed() => {
|
||||
println!("task canceled");
|
||||
Err(RenderError::Canceled)
|
||||
},
|
||||
}
|
||||
task.await
|
||||
// tokio::select! {
|
||||
// res = task => res,
|
||||
// _ = tx.closed() => {
|
||||
// println!("task canceled");
|
||||
// Err(RenderError::Canceled)
|
||||
// },
|
||||
// }
|
||||
};
|
||||
self.pool.push(Box::pin(future));
|
||||
|
||||
self.pool.as_mut().unwrap().push(Box::pin(future));
|
||||
self.switcher.add(rx, timestamp);
|
||||
}
|
||||
|
||||
pub fn run(&mut self) -> BoxFuture<'static, Vec<Result<RenderResult, RenderError>>> {
|
||||
let pool = self.get_pool().unwrap();
|
||||
Box::pin(async move {
|
||||
let result = join_all(pool).await;
|
||||
return result;
|
||||
})
|
||||
}
|
||||
|
||||
pub fn get_pool(
|
||||
&mut self,
|
||||
) -> Option<Vec<BoxFuture<'static, Result<RenderResult, RenderError>>>> {
|
||||
self.pool.take()
|
||||
}
|
||||
|
||||
pub fn cancel_task(&mut self, timestamp: i64) {}
|
||||
}
|
||||
|
||||
@ -182,49 +202,52 @@ impl Dispatcher {
|
||||
let datetime_format: regex::Regex =
|
||||
Regex::new(r"(?:%[YHMSmd](?:[-/:_]?%[YHMSmd])*)").unwrap();
|
||||
self.path_format.get(name).map(|s| {
|
||||
let mut path = s.clone();
|
||||
let path = s.clone();
|
||||
let need_formated = datetime_format.captures_iter(&path).collect::<Vec<_>>();
|
||||
let mut fore = self.fore_len;
|
||||
let mut back = self.back_len;
|
||||
let mut back = 0;
|
||||
let mut result_paths = Vec::new();
|
||||
|
||||
while fore > 0 {
|
||||
let mut result_path = path.clone();
|
||||
let t = current_time - self.step * fore as i32;
|
||||
for need_format in need_formated.iter() {
|
||||
let fmt = need_format.get(0).unwrap().as_str();
|
||||
let t = t.format(fmt).to_string();
|
||||
path.replace(fmt, &t);
|
||||
result_path = result_path.replace(fmt, &t);
|
||||
}
|
||||
|
||||
if check_existed {
|
||||
if !std::path::Path::new(&path).exists() {
|
||||
if !std::path::Path::new(&result_path).exists() {
|
||||
continue;
|
||||
} else {
|
||||
result_paths.push((path.clone(), t));
|
||||
result_paths.push((result_path.clone(), t));
|
||||
}
|
||||
} else {
|
||||
result_paths.push((path.clone(), t));
|
||||
result_paths.push((result_path.clone(), t));
|
||||
}
|
||||
fore = fore - 1;
|
||||
}
|
||||
while back > 0 {
|
||||
let t = current_time + self.step * fore as i32;
|
||||
|
||||
while back < self.back_len {
|
||||
let mut result_path = path.clone();
|
||||
let t = current_time + self.step * back as i32;
|
||||
for need_format in need_formated.iter() {
|
||||
let fmt = need_format.get(0).unwrap().as_str();
|
||||
let t = t.format(fmt).to_string();
|
||||
path.replace(fmt, &t);
|
||||
result_path = result_path.replace(fmt, &t);
|
||||
}
|
||||
|
||||
if check_existed {
|
||||
if !std::path::Path::new(&path).exists() {
|
||||
if !std::path::Path::new(&result_path).exists() {
|
||||
continue;
|
||||
} else {
|
||||
result_paths.push((path.clone(), t));
|
||||
result_paths.push((result_path.clone(), t));
|
||||
}
|
||||
} else {
|
||||
result_paths.push((path.clone(), t));
|
||||
result_paths.push((result_path.clone(), t));
|
||||
}
|
||||
back = back - 1;
|
||||
back = back + 1;
|
||||
}
|
||||
|
||||
result_paths
|
||||
@ -320,3 +343,15 @@ fn data_to_layer(block: Block) -> Option<(DateTime<Utc>, Layer)> {
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_send_sync() {
|
||||
fn assert_send<T: Send>() {}
|
||||
fn assert_sync<T: Sync>() {}
|
||||
|
||||
assert_send::<Pipeline>(); // 如果 MyStruct 不是 Send,这里会编译失败
|
||||
|
||||
assert_send::<RenderResult>();
|
||||
}
|
||||
|
||||
// Pin<Box<dyn Future<Output = Result<Vec<RenderResult>, RenderError>> + Send + 'static>>
|
||||
|
||||
@ -19,8 +19,7 @@ type PrepareFunc = Arc<
|
||||
// Box<dyn LayerImpl + Send + Sync>,
|
||||
Arc<Mutex<CanvasWrapper>>,
|
||||
CMS,
|
||||
)
|
||||
-> Pin<Box<dyn Future<Output = Target> + Send + Sync>>
|
||||
) -> Target
|
||||
+ Sync
|
||||
+ Send,
|
||||
>,
|
||||
@ -57,9 +56,9 @@ pub trait LayerImpl: Debug {
|
||||
|
||||
impl Layer {
|
||||
pub fn new<
|
||||
FU: Future<Output = Target> + Send + Sync + 'static,
|
||||
// FU: Future<Output = Target> + Send + Sync + 'static,
|
||||
F: 'static + Fn(&Self, Render, (f32, f32)) + Send + Sync,
|
||||
PREPARE: FnOnce(LayerImplSync, Arc<Mutex<CanvasWrapper>>, CMS) -> FU + Send + Sync + 'static,
|
||||
PREPARE: FnOnce(LayerImplSync, Arc<Mutex<CanvasWrapper>>, CMS) -> Target + Send + Sync + 'static,
|
||||
IMP: LayerImpl + Sync + Send + 'static,
|
||||
>(
|
||||
visiable: bool,
|
||||
@ -73,17 +72,9 @@ impl Layer {
|
||||
target: Arc::new(Mutex::new(None)),
|
||||
name: layer_name,
|
||||
prepare: Arc::new(Mutex::new(prepare.map(|p| {
|
||||
Box::new(move |a, b, c| {
|
||||
Box::pin(p(a, b, c))
|
||||
as Pin<Box<dyn Future<Output = Target> + Send + Sync + 'static>>
|
||||
})
|
||||
Box::new(move |a, b, c| p(a, b, c))
|
||||
as Box<
|
||||
dyn FnOnce(
|
||||
LayerImplSync,
|
||||
Arc<Mutex<CanvasWrapper>>,
|
||||
CMS,
|
||||
)
|
||||
-> Pin<Box<dyn Future<Output = Target> + Send + Sync>>
|
||||
dyn FnOnce(LayerImplSync, Arc<Mutex<CanvasWrapper>>, CMS) -> Target
|
||||
+ Sync
|
||||
+ Send,
|
||||
>
|
||||
@ -125,6 +116,7 @@ impl Layer {
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct Target {
|
||||
pub target: TargetType,
|
||||
pub thumbnail: Option<gtk::gdk::Texture>,
|
||||
pub width: f32,
|
||||
pub height: f32,
|
||||
pub bounds: (Range, Range),
|
||||
@ -137,12 +129,19 @@ pub enum TargetType {
|
||||
}
|
||||
|
||||
impl Target {
|
||||
pub fn new(target: TargetType, width: f32, height: f32, bounds: (Range, Range)) -> Self {
|
||||
pub fn new(
|
||||
target: TargetType,
|
||||
width: f32,
|
||||
height: f32,
|
||||
bounds: (Range, Range),
|
||||
thumbnail: Option<gtk::gdk::Texture>,
|
||||
) -> Self {
|
||||
Self {
|
||||
target,
|
||||
width,
|
||||
height,
|
||||
bounds,
|
||||
thumbnail,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -4,7 +4,7 @@ use femtovg::{
|
||||
};
|
||||
use geo_types::LineString;
|
||||
use gl::types::GLvoid;
|
||||
use image::{ImageBuffer, Rgba};
|
||||
use image::{imageops::resize, ImageBuffer, Rgba};
|
||||
use ndarray::ArrayView2;
|
||||
use num_traits::{Num, NumOps};
|
||||
use std::{fmt::Debug, io::Cursor, marker::PhantomData};
|
||||
@ -151,6 +151,16 @@ where
|
||||
|
||||
let img: ImageBuffer<Rgba<u8>, Vec<u8>> = ImageBuffer::from_raw(w as u32, h as u32, pixels)
|
||||
.expect("Failed to create ImageBuffer");
|
||||
|
||||
let thumbnail = resize(&img, 500, 500, image::imageops::FilterType::Lanczos3);
|
||||
let mut thumb_buffer = Cursor::new(Vec::new());
|
||||
img.write_to(&mut thumb_buffer, image::ImageOutputFormat::Png)
|
||||
.expect("Failed to write PNG buffer");
|
||||
let thumb_data = thumb_buffer.into_inner();
|
||||
|
||||
let thumbnail_tex =
|
||||
gtk::gdk::Texture::from_bytes(>k::glib::Bytes::from(&thumb_data)).unwrap();
|
||||
|
||||
// 将 ImageBuffer 编码为 PNG
|
||||
let mut png_buffer = Cursor::new(Vec::new());
|
||||
img.write_to(&mut png_buffer, image::ImageOutputFormat::Png)
|
||||
@ -169,6 +179,7 @@ where
|
||||
w,
|
||||
h,
|
||||
((d1_start, d1_end).into(), (d2_start, d2_end).into()),
|
||||
Some(thumbnail_tex),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,6 +9,7 @@ use std::sync::Mutex;
|
||||
use super::super::{cms::CMS, Layer, LayerImpl, LayerImplSync, Render, Target, TargetType};
|
||||
use crate::data::{AsyncDataLoader, DataLoader, Radar2d};
|
||||
use crate::pipeline::offscreen_renderer::CanvasWrapper;
|
||||
use tokio::task;
|
||||
|
||||
use super::{
|
||||
color_mapper::ColorMapper,
|
||||
@ -59,7 +60,7 @@ impl Layer {
|
||||
},
|
||||
layer_name,
|
||||
Some(
|
||||
|renderer: LayerImplSync, c: Arc<Mutex<CanvasWrapper>>, cms: CMS| async move {
|
||||
move |renderer: LayerImplSync, c: Arc<Mutex<CanvasWrapper>>, cms: CMS| {
|
||||
let mut canvas = c.lock().unwrap();
|
||||
let renderer = renderer.lock().unwrap();
|
||||
let img = renderer.draw(&mut canvas, cms).unwrap();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user