MCPcopy Create free account
hub / github.com/f0rr0/oliphaunt / verify_generated_extension_surface

Function verify_generated_extension_surface

xtask/src/main.rs:5987–6076  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

5985}
5986
5987fn verify_generated_extension_surface() -> Result<()> {
5988 let manifest_path = Path::new(GENERATED_ASSETS_DIR).join("manifest.json");
5989 let manifest_text = fs::read_to_string(&manifest_path)
5990 .with_context(|| format!("read {}", manifest_path.display()))?;
5991 let manifest: AssetManifestOut =
5992 serde_json::from_str(&manifest_text).context("parse committed asset manifest")?;
5993 let catalog_text = fs::read_to_string("assets/generated/extensions.catalog.json")
5994 .context("read assets/generated/extensions.catalog.json")?;
5995 let catalog: serde_json::Value =
5996 serde_json::from_str(&catalog_text).context("parse generated extension catalog")?;
5997 let generated = fs::read_to_string("src/pglite/generated_extensions.rs")
5998 .context("read src/pglite/generated_extensions.rs")?;
5999
6000 let mut promoted_constants = BTreeMap::new();
6001 for entry in catalog
6002 .get("extensions")
6003 .and_then(|value| value.as_array())
6004 .ok_or_else(|| anyhow!("extension catalog is missing extensions array"))?
6005 {
6006 let promoted = entry
6007 .pointer("/promotion/promoted")
6008 .and_then(|value| value.as_bool())
6009 .unwrap_or(false);
6010 if !promoted {
6011 continue;
6012 }
6013 let sql_name = entry
6014 .get("sql-name")
6015 .and_then(|value| value.as_str())
6016 .ok_or_else(|| anyhow!("promoted extension is missing sql-name"))?;
6017 let rust_constant = entry
6018 .get("rust-constant")
6019 .and_then(|value| value.as_str())
6020 .ok_or_else(|| anyhow!("promoted extension {sql_name} is missing rust-constant"))?;
6021 promoted_constants.insert(sql_name.to_owned(), rust_constant.to_owned());
6022 }
6023
6024 let manifest_sql_names = manifest
6025 .extensions
6026 .iter()
6027 .map(|extension| extension.sql_name.clone())
6028 .collect::<BTreeSet<_>>();
6029 let catalog_sql_names = promoted_constants.keys().cloned().collect::<BTreeSet<_>>();
6030 if manifest_sql_names != catalog_sql_names {
6031 bail!(
6032 "promoted extension catalog and asset manifest disagree: manifest-only={:?} catalog-only={:?}",
6033 manifest_sql_names
6034 .difference(&catalog_sql_names)
6035 .collect::<Vec<_>>(),
6036 catalog_sql_names
6037 .difference(&manifest_sql_names)
6038 .collect::<Vec<_>>()
6039 );
6040 }
6041
6042 for extension in &manifest.extensions {
6043 let rust_constant = promoted_constants.get(&extension.sql_name).ok_or_else(|| {
6044 anyhow!(

Callers 3

assetsFunction · 0.85

Calls 4

ensure_eqFunction · 0.85
insertMethod · 0.80
iterMethod · 0.80
joinMethod · 0.45

Tested by

no test coverage detected