Skip to content

Commit cf25f46

Browse files
committed
Use traits in the extended validator as well
1 parent 91a3ab8 commit cf25f46

File tree

5 files changed

+46
-112
lines changed

5 files changed

+46
-112
lines changed

src/extended.rs

Lines changed: 7 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use clap::ArgMatches;
2-
use tes3::esp::{Dialogue, DialogueInfo, TES3Object, TypeInfo};
2+
use tes3::esp::{Dialogue, DialogueInfo, TES3Object};
33

44
use self::{
55
cells::CellValidator,
@@ -19,15 +19,7 @@ pub struct ExtendedValidator {
1919

2020
#[allow(unused_variables)]
2121
trait ExtendedHandler {
22-
fn on_record(
23-
&mut self,
24-
record: &TES3Object,
25-
typename: &'static str,
26-
id: &str,
27-
file: &str,
28-
last: bool,
29-
) {
30-
}
22+
fn on_record(&mut self, record: &TES3Object, file: &str, last: bool) {}
3123

3224
fn on_info(&mut self, record: &DialogueInfo, topic: &Dialogue, file: &str, last: bool) {}
3325

@@ -56,87 +48,19 @@ impl ExtendedValidator {
5648
let mut current_topic = &dummy;
5749
for record in records {
5850
match record {
59-
TES3Object::Activator(r) => {
60-
self.on_record(record, r.type_name(), &r.id, file, last)
61-
}
62-
TES3Object::Alchemy(r) => self.on_record(record, r.type_name(), &r.id, file, last),
63-
TES3Object::Apparatus(r) => {
64-
self.on_record(record, r.type_name(), &r.id, file, last)
65-
}
66-
TES3Object::Armor(r) => self.on_record(record, r.type_name(), &r.id, file, last),
67-
TES3Object::Birthsign(r) => {
68-
self.on_record(record, r.type_name(), &r.id, file, last)
69-
}
70-
TES3Object::Bodypart(r) => self.on_record(record, r.type_name(), &r.id, file, last),
71-
TES3Object::Book(r) => self.on_record(record, r.type_name(), &r.id, file, last),
72-
TES3Object::Cell(r) => {
73-
self.on_record(record, r.type_name(), &r.name, file, last);
74-
}
75-
TES3Object::Class(r) => self.on_record(record, r.type_name(), &r.id, file, last),
76-
TES3Object::Clothing(r) => self.on_record(record, r.type_name(), &r.id, file, last),
77-
TES3Object::Container(r) => {
78-
self.on_record(record, r.type_name(), &r.id, file, last);
79-
}
80-
TES3Object::Creature(r) => {
81-
self.on_record(record, r.type_name(), &r.id, file, last);
82-
}
8351
TES3Object::Dialogue(r) => {
84-
self.on_record(record, r.type_name(), &r.id, file, last);
52+
self.on_record(record, file, last);
8553
current_topic = r;
8654
}
87-
TES3Object::Door(r) => self.on_record(record, r.type_name(), &r.id, file, last),
88-
TES3Object::Enchanting(r) => {
89-
self.on_record(record, r.type_name(), &r.id, file, last)
90-
}
91-
TES3Object::Faction(r) => self.on_record(record, r.type_name(), &r.id, file, last),
92-
TES3Object::GameSetting(r) => {
93-
self.on_record(record, r.type_name(), &r.id, file, last)
94-
}
95-
TES3Object::GlobalVariable(r) => {
96-
self.on_record(record, r.type_name(), &r.id, file, last)
97-
}
9855
TES3Object::Header(_) => {}
9956
TES3Object::DialogueInfo(r) => {
100-
self.on_record(record, r.type_name(), &r.id, file, last);
57+
self.on_record(record, file, last);
10158
self.on_info(r, current_topic, file, last);
10259
}
103-
TES3Object::Ingredient(r) => {
104-
self.on_record(record, r.type_name(), &r.id, file, last)
105-
}
10660
TES3Object::Landscape(_) => {}
10761
TES3Object::LandscapeTexture(_) => {}
108-
TES3Object::LeveledCreature(r) => {
109-
self.on_record(record, r.type_name(), &r.id, file, last);
110-
}
111-
TES3Object::LeveledItem(r) => {
112-
self.on_record(record, r.type_name(), &r.id, file, last);
113-
}
114-
TES3Object::Light(r) => self.on_record(record, r.type_name(), &r.id, file, last),
115-
TES3Object::Lockpick(r) => self.on_record(record, r.type_name(), &r.id, file, last),
116-
TES3Object::MagicEffect(r) => self.on_record(record, r.type_name(), "", file, last),
117-
TES3Object::MiscItem(r) => self.on_record(record, r.type_name(), &r.id, file, last),
118-
TES3Object::Npc(r) => {
119-
self.on_record(record, r.type_name(), &r.id, file, last);
120-
}
121-
TES3Object::PathGrid(r) => self.on_record(record, r.type_name(), "", file, last),
122-
TES3Object::Probe(r) => self.on_record(record, r.type_name(), &r.id, file, last),
123-
TES3Object::Race(r) => self.on_record(record, r.type_name(), &r.id, file, last),
124-
TES3Object::Region(r) => self.on_record(record, r.type_name(), &r.id, file, last),
125-
TES3Object::RepairItem(r) => {
126-
self.on_record(record, r.type_name(), &r.id, file, last)
127-
}
128-
TES3Object::Script(r) => {
129-
self.on_record(record, r.type_name(), &r.id, file, last);
130-
}
13162
TES3Object::Skill(_) => {}
132-
TES3Object::Sound(r) => self.on_record(record, r.type_name(), &r.id, file, last),
133-
TES3Object::SoundGen(r) => self.on_record(record, r.type_name(), &r.id, file, last),
134-
TES3Object::Spell(r) => self.on_record(record, r.type_name(), &r.id, file, last),
135-
TES3Object::StartScript(r) => {
136-
self.on_record(record, r.type_name(), &r.id, file, last)
137-
}
138-
TES3Object::Static(r) => self.on_record(record, r.type_name(), &r.id, file, last),
139-
TES3Object::Weapon(r) => self.on_record(record, r.type_name(), &r.id, file, last),
63+
_ => self.on_record(record, file, last),
14064
}
14165
}
14266
if last {
@@ -146,16 +70,9 @@ impl ExtendedValidator {
14670
}
14771
}
14872

149-
fn on_record(
150-
&mut self,
151-
record: &TES3Object,
152-
typename: &'static str,
153-
id: &str,
154-
file: &str,
155-
last: bool,
156-
) {
73+
fn on_record(&mut self, record: &TES3Object, file: &str, last: bool) {
15774
for handler in &mut self.handlers {
158-
handler.on_record(record, typename, id, file, last);
75+
handler.on_record(record, file, last);
15976
}
16077
}
16178

src/extended/cells.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ pub struct CellValidator {
1515
}
1616

1717
impl ExtendedHandler for CellValidator {
18-
fn on_record(&mut self, record: &TES3Object, _: &str, id: &str, _: &str, last: bool) {
18+
fn on_record(&mut self, record: &TES3Object, _: &str, last: bool) {
1919
match record {
2020
TES3Object::PathGrid(pathgrid) => {
2121
if !pathgrid.cell.is_empty() {
@@ -29,7 +29,7 @@ impl ExtendedHandler for CellValidator {
2929
&& !cell.name.starts_with("T_")
3030
{
3131
self.cells
32-
.push((id.to_ascii_lowercase(), cell.editor_id().into()));
32+
.push((cell.name.to_ascii_lowercase(), cell.editor_id().into()));
3333
if !cannot_sleep(cell) {
3434
let count = cell
3535
.references
@@ -47,16 +47,19 @@ impl ExtendedHandler for CellValidator {
4747
}
4848
}
4949
TES3Object::LeveledCreature(_) => {
50-
self.inhabitants.insert(id.to_ascii_lowercase());
50+
self.inhabitants
51+
.insert(record.editor_id_ascii_lowercase().into_owned());
5152
}
5253
TES3Object::Creature(c) => {
5354
if !c.is_dead() {
54-
self.inhabitants.insert(id.to_ascii_lowercase());
55+
self.inhabitants
56+
.insert(record.editor_id_ascii_lowercase().into_owned());
5557
}
5658
}
5759
TES3Object::Npc(n) => {
5860
if !n.is_dead() {
59-
self.inhabitants.insert(id.to_ascii_lowercase());
61+
self.inhabitants
62+
.insert(record.editor_id_ascii_lowercase().into_owned());
6063
}
6164
}
6265
_ => {}

src/extended/items.rs

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,55 +12,69 @@ pub struct OwnershipValidator {
1212
}
1313

1414
impl ExtendedHandler for OwnershipValidator {
15-
fn on_record(&mut self, record: &TES3Object, _: &str, id: &str, _: &str, last: bool) {
15+
fn on_record(&mut self, record: &TES3Object, _: &str, last: bool) {
1616
match record {
1717
TES3Object::Activator(activator) => {
1818
if !activator.script.is_empty()
1919
&& activator.script.eq_ignore_ascii_case("bed_standard")
2020
{
21-
self.ownable.insert(id.to_ascii_lowercase());
21+
self.ownable
22+
.insert(record.editor_id_ascii_lowercase().into_owned());
2223
}
2324
}
2425
TES3Object::Alchemy(_) => {
25-
self.items.insert(id.to_ascii_lowercase());
26+
self.items
27+
.insert(record.editor_id_ascii_lowercase().into_owned());
2628
}
2729
TES3Object::Apparatus(_) => {
28-
self.items.insert(id.to_ascii_lowercase());
30+
self.items
31+
.insert(record.editor_id_ascii_lowercase().into_owned());
2932
}
3033
TES3Object::Armor(_) => {
31-
self.items.insert(id.to_ascii_lowercase());
34+
self.items
35+
.insert(record.editor_id_ascii_lowercase().into_owned());
3236
}
3337
TES3Object::Book(_) => {
34-
self.items.insert(id.to_ascii_lowercase());
38+
self.items
39+
.insert(record.editor_id_ascii_lowercase().into_owned());
3540
}
3641
TES3Object::Clothing(_) => {
37-
self.items.insert(id.to_ascii_lowercase());
42+
self.items
43+
.insert(record.editor_id_ascii_lowercase().into_owned());
3844
}
3945
TES3Object::Container(_) => {
40-
self.ownable.insert(id.to_ascii_lowercase());
46+
self.ownable
47+
.insert(record.editor_id_ascii_lowercase().into_owned());
4148
}
4249
TES3Object::Ingredient(_) => {
43-
self.items.insert(id.to_ascii_lowercase());
50+
self.items
51+
.insert(record.editor_id_ascii_lowercase().into_owned());
4452
}
4553
TES3Object::Light(light) => {
4654
if light.data.flags.contains(LightFlags::CAN_CARRY) {
47-
self.items.insert(id.to_ascii_lowercase());
55+
self.items
56+
.insert(record.editor_id_ascii_lowercase().into_owned());
4857
}
4958
}
5059
TES3Object::Lockpick(_) => {
51-
self.items.insert(id.to_ascii_lowercase());
60+
self.items
61+
.insert(record.editor_id_ascii_lowercase().into_owned());
5262
}
5363
TES3Object::MiscItem(_) => {
54-
self.items.insert(id.to_ascii_lowercase());
64+
self.items
65+
.insert(record.editor_id_ascii_lowercase().into_owned());
5566
}
5667
TES3Object::Probe(_) => {
57-
self.items.insert(id.to_ascii_lowercase());
68+
self.items
69+
.insert(record.editor_id_ascii_lowercase().into_owned());
5870
}
5971
TES3Object::RepairItem(_) => {
60-
self.items.insert(id.to_ascii_lowercase());
72+
self.items
73+
.insert(record.editor_id_ascii_lowercase().into_owned());
6174
}
6275
TES3Object::Weapon(_) => {
63-
self.items.insert(id.to_ascii_lowercase());
76+
self.items
77+
.insert(record.editor_id_ascii_lowercase().into_owned());
6478
}
6579
TES3Object::Cell(cell) => {
6680
if !last {

src/extended/names.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pub struct QuestNameValidator {
1717
}
1818

1919
impl ExtendedHandler for NameValidator {
20-
fn on_record(&mut self, record: &TES3Object, _: &str, _: &str, _: &str, _: bool) {
20+
fn on_record(&mut self, record: &TES3Object, _: &str, _: bool) {
2121
if let TES3Object::Npc(npc) = record {
2222
let min_distance = (npc.name.len() as f32 / DISTANCE_DIV).round() as usize;
2323
if min_distance < 1 {

src/extended/weapons.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ struct BaseWeapon {
1515
}
1616

1717
impl ExtendedHandler for WeaponValidator {
18-
fn on_record(&mut self, record: &TES3Object, _: &str, _: &str, _: &str, last: bool) {
18+
fn on_record(&mut self, record: &TES3Object, _: &str, last: bool) {
1919
if let TES3Object::Weapon(weapon) = record {
2020
if weapon.name.eq_ignore_ascii_case("<deprecated>") {
2121
return;

0 commit comments

Comments
 (0)