1pub mod audit_log;
13pub mod objects;
14pub mod objects_v74;
15pub mod objects_v75;
16pub mod objects_v76;
17pub mod objects_v77;
18pub mod objects_v78;
19pub mod objects_v79;
20pub mod objects_v80;
21pub mod objects_v81;
22pub mod objects_v82;
23pub mod objects_v83;
24pub mod objects_v84;
25pub mod objects_v85;
26pub mod objects_v86;
27pub mod objects_v87;
28pub mod objects_v88;
29pub mod objects_v89;
30pub mod objects_v90;
31pub mod serialization;
32
33pub const CATALOG_VERSION: u64 = 90;
39
40pub const MIN_CATALOG_VERSION: u64 = 74;
44
45#[cfg(test)]
46mod tests {
47 use std::collections::BTreeSet;
48 use std::fs;
49 use std::path::PathBuf;
50
51 use crate::{CATALOG_VERSION, MIN_CATALOG_VERSION};
52
53 #[mz_ore::test]
54 fn test_assert_snapshots_exist() {
55 let src_dir: PathBuf = [env!("CARGO_MANIFEST_DIR"), "src"].iter().collect();
56
57 let mut filenames: BTreeSet<_> = fs::read_dir(src_dir)
59 .expect("failed to read src dir")
60 .map(|entry| entry.expect("failed to read dir entry").file_name())
61 .map(|filename| filename.to_str().expect("utf8").to_string())
62 .filter(|filename| filename.starts_with("objects_v"))
63 .collect();
64
65 for version in MIN_CATALOG_VERSION..=CATALOG_VERSION {
67 let filename = format!("objects_v{version}.rs");
68 assert!(
69 filenames.remove(&filename),
70 "Missing snapshot for v{version}."
71 );
72 }
73
74 if !filenames.is_empty()
76 && filenames.remove(&format!("objects_v{}.proto", CATALOG_VERSION + 1))
77 {
78 panic!(
79 "Found snapshot for v{}, please also bump `CATALOG_VERSION`.",
80 CATALOG_VERSION + 1
81 )
82 }
83
84 assert!(
86 filenames.is_empty(),
87 "Found snapshots for unsupported catalog versions {filenames:?}.\n\
88 If you just increased `MIN_CATALOG_VERSION`, then please delete the old snapshots. \
89 If you created a new snapshot, please bump `CATALOG_VERSION`."
90 );
91 }
92
93 #[mz_ore::test]
94 fn test_assert_current_snapshot() {
95 let src_dir: PathBuf = [env!("CARGO_MANIFEST_DIR"), "src"].iter().collect();
96 let current_rs = src_dir.join("objects.rs");
97 let snapshot_rs = src_dir.join(format!("objects_v{CATALOG_VERSION}.rs"));
98
99 let current = fs::read_to_string(current_rs).expect("read current");
100 let snapshot = fs::read_to_string(snapshot_rs).expect("read snapshot");
101
102 similar_asserts::assert_eq!(current, snapshot);
107 }
108}