(registry: &LanguageRegistry, req: &ExtractRequest)
| 128 | } |
| 129 | |
| 130 | fn process_request(registry: &LanguageRegistry, req: &ExtractRequest) -> ExtractResponse { |
| 131 | let abs_path = req.project_root.join(&req.file_path); |
| 132 | let Ok(source) = sync::read_source_file(&abs_path) else { |
| 133 | return ExtractResponse { |
| 134 | file_path: req.file_path.clone(), |
| 135 | data: None, |
| 136 | }; |
| 137 | }; |
| 138 | let Some(extractor) = registry.extractor_for_file(&req.file_path) else { |
| 139 | return ExtractResponse { |
| 140 | file_path: req.file_path.clone(), |
| 141 | data: None, |
| 142 | }; |
| 143 | }; |
| 144 | |
| 145 | let mut result = extractor.extract(&req.file_path, &source); |
| 146 | result.sanitize(); |
| 147 | let content_hash = sync::content_hash(&source); |
| 148 | let size = source.len() as u64; |
| 149 | let mtime = |
| 150 | sync::file_stat(&abs_path).map_or_else(crate::tracedecay::current_timestamp, |(m, _)| m); |
| 151 | |
| 152 | ExtractResponse { |
| 153 | file_path: req.file_path.clone(), |
| 154 | data: Some(ExtractData { |
| 155 | result, |
| 156 | content_hash, |
| 157 | size, |
| 158 | mtime, |
| 159 | }), |
| 160 | } |
| 161 | } |
| 162 | |
| 163 | // ============================================================================= |
| 164 | // Pool side — runs inside the parent |
no test coverage detected