Skip to content

Commit 7c469e0

Browse files
committed
use exhaustive checking for manual Serialize implementations
1 parent 5e1a984 commit 7c469e0

File tree

4 files changed

+48
-17
lines changed

4 files changed

+48
-17
lines changed

src/function/memo.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -379,15 +379,18 @@ mod persistence {
379379
}
380380
}
381381

382-
let value = self
383-
.value
384-
.as_ref()
385-
.expect("attempted to serialize empty memo");
382+
let Memo {
383+
value,
384+
verified_at,
385+
revisions,
386+
} = self;
387+
388+
let value = value.as_ref().expect("attempted to serialize empty memo");
386389

387390
let mut s = serializer.serialize_struct("Memo", 3)?;
388391
s.serialize_field("value", &SerializeValue::<C>(value))?;
389-
s.serialize_field("verified_at", &self.verified_at)?;
390-
s.serialize_field("revisions", &self.revisions)?;
392+
s.serialize_field("verified_at", &verified_at)?;
393+
s.serialize_field("revisions", &revisions)?;
391394
s.end()
392395
}
393396
}

src/input.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -494,9 +494,16 @@ mod persistence {
494494
}
495495
}
496496

497-
map.serialize_entry(&"durabilities", &self.durabilities)?;
498-
map.serialize_entry(&"revisions", &self.revisions)?;
499-
map.serialize_entry(&"fields", &SerializeFields::<C>(&self.fields))?;
497+
let Value {
498+
fields,
499+
revisions,
500+
durabilities,
501+
memos: _,
502+
} = self;
503+
504+
map.serialize_entry(&"durabilities", &durabilities)?;
505+
map.serialize_entry(&"revisions", &revisions)?;
506+
map.serialize_entry(&"fields", &SerializeFields::<C>(fields))?;
500507

501508
map.end()
502509
}

src/interned.rs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ where
155155

156156
/// Shared value data can only be read through the lock.
157157
#[repr(Rust, packed)] // Allow `durability` to be stored in the padding of the outer `Value` struct.
158+
#[derive(Clone, Copy)]
158159
struct ValueShared {
159160
/// The interned ID for this value.
160161
///
@@ -1346,16 +1347,28 @@ mod persistence {
13461347
}
13471348
}
13481349

1350+
let Value {
1351+
fields,
1352+
shared,
1353+
shard: _,
1354+
link: _,
1355+
memos: _,
1356+
} = self;
1357+
13491358
// SAFETY: The safety invariant of `Ingredient::serialize` ensures we have exclusive access
13501359
// to the database.
1351-
let fields = unsafe { &*self.fields.get() };
1360+
let fields = unsafe { &*fields.get() };
13521361

13531362
// SAFETY: The safety invariant of `Ingredient::serialize` ensures we have exclusive access
13541363
// to the database.
1355-
let value_shared = unsafe { &*self.shared.get() };
1364+
let ValueShared {
1365+
durability,
1366+
last_interned_at,
1367+
id: _,
1368+
} = unsafe { *shared.get() };
13561369

1357-
map.serialize_entry(&"durability", &{ value_shared.durability })?;
1358-
map.serialize_entry(&"last_interned_at", &{ value_shared.last_interned_at })?;
1370+
map.serialize_entry(&"durability", &durability)?;
1371+
map.serialize_entry(&"last_interned_at", &last_interned_at)?;
13591372
map.serialize_entry(&"fields", &SerializeFields::<C>(fields))?;
13601373

13611374
map.end()

src/tracked_struct.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1215,10 +1215,18 @@ mod persistence {
12151215
}
12161216
}
12171217

1218-
map.serialize_entry(&"durability", &self.durability)?;
1219-
map.serialize_entry(&"updated_at", &self.updated_at)?;
1220-
map.serialize_entry(&"revisions", &self.revisions)?;
1221-
map.serialize_entry(&"fields", &SerializeFields::<C>(&self.fields))?;
1218+
let Value {
1219+
durability,
1220+
updated_at,
1221+
fields,
1222+
revisions,
1223+
memos: _,
1224+
} = self;
1225+
1226+
map.serialize_entry(&"durability", &durability)?;
1227+
map.serialize_entry(&"updated_at", &updated_at)?;
1228+
map.serialize_entry(&"revisions", &revisions)?;
1229+
map.serialize_entry(&"fields", &SerializeFields::<C>(fields))?;
12221230

12231231
map.end()
12241232
}

0 commit comments

Comments
 (0)