| 465 | } |
| 466 | |
| 467 | pub(crate) fn parse_metadata_file( |
| 468 | &self, |
| 469 | at: &Path, |
| 470 | ) -> Result<CompileResult, SpirvBuilderError> { |
| 471 | let metadata_contents = File::open(at).map_err(SpirvBuilderError::MetadataFileMissing)?; |
| 472 | let metadata: CompileResult = serde_json::from_reader(BufReader::new(metadata_contents)) |
| 473 | .map_err(SpirvBuilderError::MetadataFileMalformed)?; |
| 474 | match &metadata.module { |
| 475 | ModuleResult::SingleModule(spirv_module) => { |
| 476 | assert!(!self.multimodule); |
| 477 | let env_var = format!( |
| 478 | "{}.spv", |
| 479 | at.file_name() |
| 480 | .unwrap() |
| 481 | .to_str() |
| 482 | .unwrap() |
| 483 | .strip_suffix(".spv.json") |
| 484 | .unwrap() |
| 485 | ); |
| 486 | if self.print_metadata == MetadataPrintout::Full { |
| 487 | println!("cargo:rustc-env={}={}", env_var, spirv_module.display()); |
| 488 | } |
| 489 | } |
| 490 | ModuleResult::MultiModule(_) => { |
| 491 | assert!(self.multimodule); |
| 492 | } |
| 493 | } |
| 494 | Ok(metadata) |
| 495 | } |
| 496 | } |
| 497 | |
| 498 | // https://github.com/rust-lang/cargo/blob/1857880b5124580c4aeb4e8bc5f1198f491d61b1/src/cargo/util/paths.rs#L29-L52 |