This mapping has 1 multi-map group: several pairings are equally correct there. The code view shows one arbitrary valid pairing, not the only one.

Code view:

A painting is a person's account of this edit as text, recorded independently of the node mapping - a rendering often has several equally defensible answers where the mapping has one. Deletions and insertions carry no position on the opposite side in a painting, so that panel draws no caret for them.

Before

1use crate::gui::types::filters::Filters;
2use crate::location;
3use crate::networking::parse_packets::{get_sniffable_headers, packet_stream};
4use crate::networking::types::capture_context::{CaptureContext, CaptureSource};
5use crate::networking::types::my_device::MyDevice;
6use crate::networking::types::my_link_type::MyLinkType;
7use crate::utils::error_logger::{ErrorLogger, Location};
8use async_channel::Sender;
9use pcap::Device;
10use std::collections::{HashMap, VecDeque};
11use std::thread;
12use std::time::{Duration, Instant};
13use tokio::sync::broadcast::Receiver;
14
15#[derive(Default, Debug, Clone)]
16pub struct TrafficPreview {
17 pub data: HashMap<String, u128>,
18}
19
20#[derive(Default, Debug, Clone)]
21pub struct TrafficPreviews {
22 pub data: HashMap<String, VecDeque<u128>>,
23}
24
25impl TrafficPreviews {
26 pub fn refresh(&mut self, msg: TrafficPreview) {
27 for (dev, pkts) in msg.data {
28 self.data
29 .entry(dev)
30 .and_modify(|v| v.push_back(pkts))
31 .or_insert(VecDeque::from([pkts]));
32 }
33 }
34}
35
36pub fn traffic_preview(tx: &Sender<TrafficPreview>, freeze_rxs: (Receiver<()>, Receiver<()>)) {
37 let (freeze_tx, mut freeze_rx) = tokio::sync::broadcast::channel(1_048_575);
38 let (pcap_tx, pcap_rx) = std::sync::mpsc::sync_channel(10_000);
39 for dev in Device::list().unwrap_or_default() {
40 let mut freeze_rx = freeze_tx.subscribe();
…lines 41–126 unchanged (86 lines)

After

1use crate::gui::types::filters::Filters;
2use crate::location;
3use crate::networking::parse_packets::{get_sniffable_headers, packet_stream};
4use crate::networking::types::capture_context::{CaptureContext, CaptureSource};
5use crate::networking::types::my_device::MyDevice;
6use crate::networking::types::my_link_type::MyLinkType;
7use crate::utils::error_logger::{ErrorLogger, Location};
8use async_channel::Sender;
9use pcap::Device;
10use std::collections::HashMap;
11use std::thread;
12use std::time::{Duration, Instant};
13use tokio::sync::broadcast::Receiver;
14
15#[derive(Default, Debug, Clone)]
16pub struct TrafficPreview {
17 pub data: HashMap<String, u128>,
18}
19
20pub fn traffic_preview(tx: &Sender<TrafficPreview>, freeze_rxs: (Receiver<()>, Receiver<()>)) {
21 let (freeze_tx, mut freeze_rx) = tokio::sync::broadcast::channel(1_048_575);
22 let (pcap_tx, pcap_rx) = std::sync::mpsc::sync_channel(10_000);
23 for dev in Device::list().unwrap_or_default() {
24 let mut freeze_rx = freeze_tx.subscribe();
25 let pcap_tx = pcap_tx.clone();
…lines 26–110 unchanged (85 lines)

Before

source_file
use_declaration
use "use"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "gui"
:: "::"
identifier "types"
:: "::"
identifier "filters"
:: "::"
identifier "Filters"
; ";"
use_declaration
use "use"
scoped_identifier
crate "crate"
:: "::"
identifier "location"
; ";"
use_declaration
use "use"
scoped_use_list
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "networking"
:: "::"
identifier "parse_packets"
:: "::"
use_list
{ "{"
identifier "get_sniffable_headers"
, ","
identifier "packet_stream"
} "}"
; ";"
use_declaration (+21 nodes collapsed)
use_declaration
use "use"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "networking"
:: "::"
identifier "types"
:: "::"
identifier "my_device"
:: "::"
identifier "MyDevice"
; ";"
use_declaration
use "use"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "networking"
:: "::"
identifier "types"
:: "::"
identifier "my_link_type"
:: "::"
identifier "MyLinkType"
; ";"
use_declaration
use "use"
scoped_use_list
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "utils"
:: "::"
identifier "error_logger"
:: "::"
use_list
{ "{"
identifier "ErrorLogger"
, ","
identifier "Location"
} "}"
; ";"
use_declaration
use "use"
scoped_identifier
identifier "async_channel"
:: "::"
identifier "Sender"
; ";"
use_declaration
use "use"
scoped_identifier
identifier "pcap"
:: "::"
identifier "Device"
; ";"
use_declaration
use "use"
scoped_use_list
scoped_identifier any 1:2
identifier "std"
:: "::"
identifier "collections"
:: "::"
use_list
{ "{"
identifier "HashMap"
, ","
identifier "VecDeque"
} "}"
; ";"
use_declaration
use "use"
scoped_identifier
identifier "std"
:: "::"
identifier "thread"
; ";"
use_declaration
use "use"
scoped_use_list
scoped_identifier
identifier "std"
:: "::"
identifier "time"
:: "::"
use_list
{ "{"
identifier "Duration"
, ","
identifier "Instant"
} "}"
; ";"
use_declaration
use "use"
scoped_identifier
scoped_identifier
scoped_identifier
identifier "tokio"
:: "::"
identifier "sync"
:: "::"
identifier "broadcast"
:: "::"
identifier "Receiver"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Default"
, ","
identifier "Debug"
, ","
identifier "Clone"
) ")"
] "]"
struct_item (+22 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Default"
, ","
identifier "Debug"
, ","
identifier "Clone"
) ")"
] "]"
struct_item
visibility_modifier
pub "pub"
struct "struct"
type_identifier "TrafficPreviews"
field_declaration_list
{ "{"
field_declaration
visibility_modifier
pub "pub"
field_identifier "data"
: ":"
generic_type
type_identifier "HashMap"
type_arguments
< "<"
type_identifier "String"
, ","
generic_type
type_identifier "VecDeque"
type_arguments
< "<"
primitive_type "u128"
> ">"
> ">"
, ","
} "}"
impl_item
impl "impl"
type_identifier "TrafficPreviews"
declaration_list
{ "{"
function_item
visibility_modifier
pub "pub"
fn "fn"
identifier "refresh"
parameters
( "("
self_parameter
& "&"
mutable_specifier "mut"
self "self"
, ","
parameter
identifier "msg"
: ":"
type_identifier "TrafficPreview"
) ")"
block
{ "{"
expression_statement
for_expression
for "for"
tuple_pattern
( "("
identifier "dev"
, ","
identifier "pkts"
) ")"
in "in"
field_expression
identifier "msg"
. "."
field_identifier "data"
block
{ "{"
expression_statement
call_expression
field_expression
call_expression
field_expression
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "data"
. "."
field_identifier "entry"
arguments
( "("
identifier "dev"
) ")"
. "."
field_identifier "and_modify"
arguments
( "("
closure_expression
closure_parameters
| "|"
identifier "v"
| "|"
call_expression
field_expression
identifier "v"
. "."
field_identifier "push_back"
arguments
( "("
identifier "pkts"
) ")"
) ")"
. "."
field_identifier "or_insert"
arguments
( "("
call_expression
scoped_identifier
identifier "VecDeque"
:: "::"
identifier "from"
arguments
( "("
array_expression
[ "["
identifier "pkts"
] "]"
) ")"
) ")"
; ";"
} "}"
} "}"
} "}"
function_item (+698 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Clone"
) ")"
] "]"
struct_item (+21 nodes collapsed)
function_item (+142 nodes collapsed)

After

source_file
use_declaration
use "use"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "gui"
:: "::"
identifier "types"
:: "::"
identifier "filters"
:: "::"
identifier "Filters"
; ";"
use_declaration
use "use"
scoped_identifier
crate "crate"
:: "::"
identifier "location"
; ";"
use_declaration
use "use"
scoped_use_list
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "networking"
:: "::"
identifier "parse_packets"
:: "::"
use_list
{ "{"
identifier "get_sniffable_headers"
, ","
identifier "packet_stream"
} "}"
; ";"
use_declaration (+21 nodes collapsed)
use_declaration
use "use"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "networking"
:: "::"
identifier "types"
:: "::"
identifier "my_device"
:: "::"
identifier "MyDevice"
; ";"
use_declaration
use "use"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "networking"
:: "::"
identifier "types"
:: "::"
identifier "my_link_type"
:: "::"
identifier "MyLinkType"
; ";"
use_declaration
use "use"
scoped_use_list
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "utils"
:: "::"
identifier "error_logger"
:: "::"
use_list
{ "{"
identifier "ErrorLogger"
, ","
identifier "Location"
} "}"
; ";"
use_declaration
use "use"
scoped_identifier
identifier "async_channel"
:: "::"
identifier "Sender"
; ";"
use_declaration
use "use"
scoped_identifier
identifier "pcap"
:: "::"
identifier "Device"
; ";"
use_declaration
use "use"
scoped_identifier any 1:2
scoped_identifier any 1:2
identifier "std"
:: "::"
identifier "collections"
:: "::"
identifier "HashMap"
; ";"
use_declaration
use "use"
scoped_identifier
identifier "std"
:: "::"
identifier "thread"
; ";"
use_declaration
use "use"
scoped_use_list
scoped_identifier
identifier "std"
:: "::"
identifier "time"
:: "::"
use_list
{ "{"
identifier "Duration"
, ","
identifier "Instant"
} "}"
; ";"
use_declaration
use "use"
scoped_identifier
scoped_identifier
scoped_identifier
identifier "tokio"
:: "::"
identifier "sync"
:: "::"
identifier "broadcast"
:: "::"
identifier "Receiver"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Default"
, ","
identifier "Debug"
, ","
identifier "Clone"
) ")"
] "]"
struct_item (+22 nodes collapsed)
function_item (+698 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Clone"
) ")"
] "]"
struct_item (+21 nodes collapsed)
function_item (+142 nodes collapsed)