1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
use crate::registry::compile::{
hash::{authority_id, namespace_id, package_id},
model::RegistryModel,
version::sort_versions,
};
/// Performs all compile-time optimizations.
///
/// This function mutates the intermediate model before it is
/// serialized into FlatBuffers.
pub fn optimize(model: &mut RegistryModel) {
//
// ---------------------------
// Packages
// ---------------------------
//
model
.packages
.sort_by_key(|pkg| package_id(&pkg.metadata.name));
for pkg in &mut model.packages {
sort_versions(&mut pkg.versions);
}
//
// ---------------------------
// Authorities
// ---------------------------
//
model
.authorities
.sort_by_key(|authority| authority_id(&authority.metadata.id));
//
// Registries
//
for authority in &mut model.authorities {
authority
.registries
.sort_by_key(|registry| namespace_id(®istry.namespace));
//
// History newest first
//
authority.registries.iter_mut().for_each(|registry| {
registry.history.sort_by(|a, b| b.until.cmp(&a.until));
});
}
//
// ---------------------------
// Namespaces
// ---------------------------
//
model
.namespaces
.sort_by_key(|namespace| namespace_id(&namespace.metadata.id));
}