(
path: &str,
resolver: &SecretResolver,
)
| 771 | // `rewrite_request_line`. |
| 772 | #[allow(clippy::similar_names)] |
| 773 | fn rewrite_uri_path( |
| 774 | path: &str, |
| 775 | resolver: &SecretResolver, |
| 776 | ) -> Result<Option<(String, String)>, UnresolvedPlaceholderError> { |
| 777 | let segments: Vec<&str> = path.split('/').collect(); |
| 778 | let mut resolved_segments = Vec::with_capacity(segments.len()); |
| 779 | let mut redacted_segments = Vec::with_capacity(segments.len()); |
| 780 | let mut any_rewritten = false; |
| 781 | |
| 782 | for segment in &segments { |
| 783 | let decoded = percent_decode(segment); |
| 784 | if !contains_raw_reserved_marker(&decoded) { |
| 785 | resolved_segments.push(segment.to_string()); |
| 786 | redacted_segments.push(segment.to_string()); |
| 787 | continue; |
| 788 | } |
| 789 | |
| 790 | let (resolved, redacted) = rewrite_path_segment(&decoded, resolver)?; |
| 791 | // Percent-encode the resolved segment for path context |
| 792 | resolved_segments.push(percent_encode_path_segment(&resolved)); |
| 793 | redacted_segments.push(redacted); |
| 794 | any_rewritten = true; |
| 795 | } |
| 796 | |
| 797 | if !any_rewritten { |
| 798 | return Ok(None); |
| 799 | } |
| 800 | |
| 801 | Ok(Some(( |
| 802 | resolved_segments.join("/"), |
| 803 | redacted_segments.join("/"), |
| 804 | ))) |
| 805 | } |
| 806 | |
| 807 | /// Rewrite placeholders within a single path segment (already percent-decoded). |
| 808 | /// |
no test coverage detected