Skip to content

Commit 80fc933

Browse files
authored
refactor: remove pontential panic! when instantiating table rows. (#329)
1 parent 3bacf42 commit 80fc933

8 files changed

+109
-109
lines changed

src/edge_table.rs

+15-15
Original file line numberDiff line numberDiff line change
@@ -27,21 +27,21 @@ impl PartialEq for EdgeTableRow {
2727
}
2828

2929
fn make_edge_table_row(table: &EdgeTable, pos: tsk_id_t) -> Option<EdgeTableRow> {
30-
// panic is okay here, as we are handling a bad
31-
// input value before we first call this to
32-
// set up the iterator
33-
let p = crate::SizeType::try_from(pos).unwrap();
34-
if p < table.num_rows() {
35-
let table_ref = table.table_;
36-
let rv = EdgeTableRow {
37-
id: pos.into(),
38-
left: table.left(pos).unwrap(),
39-
right: table.right(pos).unwrap(),
40-
parent: table.parent(pos).unwrap(),
41-
child: table.child(pos).unwrap(),
42-
metadata: table_row_decode_metadata!(table, table_ref, pos).map(|m| m.to_vec()),
43-
};
44-
Some(rv)
30+
if let Ok(p) = crate::SizeType::try_from(pos) {
31+
if p < table.num_rows() {
32+
let table_ref = table.table_;
33+
let rv = EdgeTableRow {
34+
id: pos.into(),
35+
left: table.left(pos).unwrap(),
36+
right: table.right(pos).unwrap(),
37+
parent: table.parent(pos).unwrap(),
38+
child: table.child(pos).unwrap(),
39+
metadata: table_row_decode_metadata!(table, table_ref, pos).map(|m| m.to_vec()),
40+
};
41+
Some(rv)
42+
} else {
43+
None
44+
}
4545
} else {
4646
None
4747
}

src/individual_table.rs

+14-14
Original file line numberDiff line numberDiff line change
@@ -52,20 +52,20 @@ pub struct IndividualTable<'a> {
5252
}
5353

5454
fn make_individual_table_row(table: &IndividualTable, pos: tsk_id_t) -> Option<IndividualTableRow> {
55-
// panic is okay here, as we are handling a bad
56-
// input value before we first call this to
57-
// set up the iterator
58-
let p = crate::SizeType::try_from(pos).unwrap();
59-
if p < table.num_rows() {
60-
let table_ref = table.table_;
61-
let rv = IndividualTableRow {
62-
id: pos.into(),
63-
flags: table.flags(pos).unwrap(),
64-
location: table.location(pos).unwrap().map(|s| s.to_vec()),
65-
parents: table.parents(pos).unwrap().map(|s| s.to_vec()),
66-
metadata: table_row_decode_metadata!(table, table_ref, pos).map(|m| m.to_vec()),
67-
};
68-
Some(rv)
55+
if let Ok(p) = crate::SizeType::try_from(pos) {
56+
if p < table.num_rows() {
57+
let table_ref = table.table_;
58+
let rv = IndividualTableRow {
59+
id: pos.into(),
60+
flags: table.flags(pos).unwrap(),
61+
location: table.location(pos).unwrap().map(|s| s.to_vec()),
62+
parents: table.parents(pos).unwrap().map(|s| s.to_vec()),
63+
metadata: table_row_decode_metadata!(table, table_ref, pos).map(|m| m.to_vec()),
64+
};
65+
Some(rv)
66+
} else {
67+
None
68+
}
6969
} else {
7070
None
7171
}

src/migration_table.rs

+16-16
Original file line numberDiff line numberDiff line change
@@ -33,22 +33,22 @@ impl PartialEq for MigrationTableRow {
3333
}
3434

3535
fn make_migration_table_row(table: &MigrationTable, pos: tsk_id_t) -> Option<MigrationTableRow> {
36-
// panic is okay here, as we are handling a bad
37-
// input value before we first call this to
38-
// set up the iterator
39-
let p = crate::SizeType::try_from(pos).unwrap();
40-
if p < table.num_rows() {
41-
let table_ref = table.table_;
42-
Some(MigrationTableRow {
43-
id: pos.into(),
44-
left: table.left(pos).unwrap(),
45-
right: table.right(pos).unwrap(),
46-
node: table.node(pos).unwrap(),
47-
source: table.source(pos).unwrap(),
48-
dest: table.dest(pos).unwrap(),
49-
time: table.time(pos).unwrap(),
50-
metadata: table_row_decode_metadata!(table, table_ref, pos).map(|m| m.to_vec()),
51-
})
36+
if let Ok(p) = crate::SizeType::try_from(pos) {
37+
if p < table.num_rows() {
38+
let table_ref = table.table_;
39+
Some(MigrationTableRow {
40+
id: pos.into(),
41+
left: table.left(pos).unwrap(),
42+
right: table.right(pos).unwrap(),
43+
node: table.node(pos).unwrap(),
44+
source: table.source(pos).unwrap(),
45+
dest: table.dest(pos).unwrap(),
46+
time: table.time(pos).unwrap(),
47+
metadata: table_row_decode_metadata!(table, table_ref, pos).map(|m| m.to_vec()),
48+
})
49+
} else {
50+
None
51+
}
5252
} else {
5353
None
5454
}

src/mutation_table.rs

+16-16
Original file line numberDiff line numberDiff line change
@@ -30,22 +30,22 @@ impl PartialEq for MutationTableRow {
3030
}
3131

3232
fn make_mutation_table_row(table: &MutationTable, pos: tsk_id_t) -> Option<MutationTableRow> {
33-
// panic is okay here, as we are handling a bad
34-
// input value before we first call this to
35-
// set up the iterator
36-
let p = crate::SizeType::try_from(pos).unwrap();
37-
if p < table.num_rows() {
38-
let table_ref = table.table_;
39-
let rv = MutationTableRow {
40-
id: pos.into(),
41-
site: table.site(pos).unwrap(),
42-
node: table.node(pos).unwrap(),
43-
parent: table.parent(pos).unwrap(),
44-
time: table.time(pos).unwrap(),
45-
derived_state: table.derived_state(pos).unwrap().map(|s| s.to_vec()),
46-
metadata: table_row_decode_metadata!(table, table_ref, pos).map(|m| m.to_vec()),
47-
};
48-
Some(rv)
33+
if let Ok(p) = crate::SizeType::try_from(pos) {
34+
if p < table.num_rows() {
35+
let table_ref = table.table_;
36+
let rv = MutationTableRow {
37+
id: pos.into(),
38+
site: table.site(pos).unwrap(),
39+
node: table.node(pos).unwrap(),
40+
parent: table.parent(pos).unwrap(),
41+
time: table.time(pos).unwrap(),
42+
derived_state: table.derived_state(pos).unwrap().map(|s| s.to_vec()),
43+
metadata: table_row_decode_metadata!(table, table_ref, pos).map(|m| m.to_vec()),
44+
};
45+
Some(rv)
46+
} else {
47+
None
48+
}
4949
} else {
5050
None
5151
}

src/node_table.rs

+14-14
Original file line numberDiff line numberDiff line change
@@ -29,20 +29,20 @@ impl PartialEq for NodeTableRow {
2929
}
3030

3131
fn make_node_table_row(table: &NodeTable, pos: tsk_id_t) -> Option<NodeTableRow> {
32-
// panic is okay here, as we are handling a bad
33-
// input value before we first call this to
34-
// set up the iterator
35-
let p = crate::SizeType::try_from(pos).unwrap();
36-
if p < table.num_rows() {
37-
let table_ref = table.table_;
38-
Some(NodeTableRow {
39-
id: pos.into(),
40-
time: table.time(pos).unwrap(),
41-
flags: table.flags(pos).unwrap(),
42-
population: table.population(pos).unwrap(),
43-
individual: table.individual(pos).unwrap(),
44-
metadata: table_row_decode_metadata!(table, table_ref, pos).map(|m| m.to_vec()),
45-
})
32+
if let Ok(p) = crate::SizeType::try_from(pos) {
33+
if p < table.num_rows() {
34+
let table_ref = table.table_;
35+
Some(NodeTableRow {
36+
id: pos.into(),
37+
time: table.time(pos).unwrap(),
38+
flags: table.flags(pos).unwrap(),
39+
population: table.population(pos).unwrap(),
40+
individual: table.individual(pos).unwrap(),
41+
metadata: table_row_decode_metadata!(table, table_ref, pos).map(|m| m.to_vec()),
42+
})
43+
} else {
44+
None
45+
}
4646
} else {
4747
None
4848
}

src/population_table.rs

+11-11
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,17 @@ impl PartialEq for PopulationTableRow {
2020
}
2121

2222
fn make_population_table_row(table: &PopulationTable, pos: tsk_id_t) -> Option<PopulationTableRow> {
23-
// panic is okay here, as we are handling a bad
24-
// input value before we first call this to
25-
// set up the iterator
26-
let p = crate::SizeType::try_from(pos).unwrap();
27-
if p < table.num_rows() {
28-
let table_ref = table.table_;
29-
let rv = PopulationTableRow {
30-
id: pos.into(),
31-
metadata: table_row_decode_metadata!(table, table_ref, pos).map(|m| m.to_vec()),
32-
};
33-
Some(rv)
23+
if let Ok(p) = crate::SizeType::try_from(pos) {
24+
if p < table.num_rows() {
25+
let table_ref = table.table_;
26+
let rv = PopulationTableRow {
27+
id: pos.into(),
28+
metadata: table_row_decode_metadata!(table, table_ref, pos).map(|m| m.to_vec()),
29+
};
30+
Some(rv)
31+
} else {
32+
None
33+
}
3434
} else {
3535
None
3636
}

src/provenance.rs

+10-10
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,16 @@ impl std::fmt::Display for ProvenanceTableRow {
4545
}
4646

4747
fn make_provenance_row(table: &ProvenanceTable, pos: tsk_id_t) -> Option<ProvenanceTableRow> {
48-
// panic is okay here, as we are handling a bad
49-
// input value before we first call this to
50-
// set up the iterator
51-
let p = crate::SizeType::try_from(pos).unwrap();
52-
if p < table.num_rows() {
53-
Some(ProvenanceTableRow {
54-
id: pos.into(),
55-
timestamp: table.timestamp(pos).unwrap(),
56-
record: table.record(pos).unwrap(),
57-
})
48+
if let Ok(p) = crate::SizeType::try_from(pos) {
49+
if p < table.num_rows() {
50+
Some(ProvenanceTableRow {
51+
id: pos.into(),
52+
timestamp: table.timestamp(pos).unwrap(),
53+
record: table.record(pos).unwrap(),
54+
})
55+
} else {
56+
None
57+
}
5858
} else {
5959
None
6060
}

src/site_table.rs

+13-13
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,19 @@ impl PartialEq for SiteTableRow {
2525
}
2626

2727
fn make_site_table_row(table: &SiteTable, pos: tsk_id_t) -> Option<SiteTableRow> {
28-
// panic is okay here, as we are handling a bad
29-
// input value before we first call this to
30-
// set up the iterator
31-
let p = crate::SizeType::try_from(pos).unwrap();
32-
if p < table.num_rows() {
33-
let table_ref = table.table_;
34-
let rv = SiteTableRow {
35-
id: pos.into(),
36-
position: table.position(pos).unwrap(),
37-
ancestral_state: table.ancestral_state(pos).unwrap().map(|s| s.to_vec()),
38-
metadata: table_row_decode_metadata!(table, table_ref, pos).map(|m| m.to_vec()),
39-
};
40-
Some(rv)
28+
if let Ok(p) = crate::SizeType::try_from(pos) {
29+
if p < table.num_rows() {
30+
let table_ref = table.table_;
31+
let rv = SiteTableRow {
32+
id: pos.into(),
33+
position: table.position(pos).unwrap(),
34+
ancestral_state: table.ancestral_state(pos).unwrap().map(|s| s.to_vec()),
35+
metadata: table_row_decode_metadata!(table, table_ref, pos).map(|m| m.to_vec()),
36+
};
37+
Some(rv)
38+
} else {
39+
None
40+
}
4141
} else {
4242
None
4343
}

0 commit comments

Comments
 (0)