|  |  | @ -1,4 +1,6 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  | use std::{ |  |  |  | use std::{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     fs::File, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     io::BufRead, | 
			
		
	
		
		
			
				
					
					|  |  |  |     path::{Path, PathBuf}, |  |  |  |     path::{Path, PathBuf}, | 
			
		
	
		
		
			
				
					
					|  |  |  |     process::Command, |  |  |  |     process::Command, | 
			
		
	
		
		
			
				
					
					|  |  |  | }; |  |  |  | }; | 
			
		
	
	
		
		
			
				
					|  |  | @ -40,9 +42,34 @@ pub fn docs() -> Result<(), anyhow::Error> { | 
			
		
	
		
		
			
				
					
					|  |  |  |         .open("./target/doc/crates.js")?; |  |  |  |         .open("./target/doc/crates.js")?; | 
			
		
	
		
		
			
				
					
					|  |  |  |     file.write_all(crates_js)?; |  |  |  |     file.write_all(crates_js)?; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     let mut search_indexes = read_lines("./target/doc/search-index.js")? | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         .map(|l| l.unwrap()) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         .collect::<Vec<_>>(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     search_indexes.truncate(search_indexes.len() - 2); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     let mut last = search_indexes.pop().unwrap(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     last = last.trim_end_matches('\\').to_string() + ",\\"; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     search_indexes.push(last); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     for l in read_lines("./bpf/target/doc/search-index.js")?.skip(1) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         search_indexes.push(l.unwrap()); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     let mut file = fs::File::options() | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         .read(true) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         .write(true) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         .open("./target/doc/search-index.js")?; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     file.write_all(search_indexes.join("\n").as_bytes())?; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     Ok(()) |  |  |  |     Ok(()) | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | fn read_lines<P>(filename: P) -> io::Result<io::Lines<io::BufReader<File>>> | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | where | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     P: AsRef<Path>, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     let file = File::open(filename)?; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     Ok(io::BufReader::new(file).lines()) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | fn copy_dir_all<P: AsRef<Path>>(src: P, dst: P) -> io::Result<()> { |  |  |  | fn copy_dir_all<P: AsRef<Path>>(src: P, dst: P) -> io::Result<()> { | 
			
		
	
		
		
			
				
					
					|  |  |  |     fs::create_dir_all(&dst)?; |  |  |  |     fs::create_dir_all(&dst)?; | 
			
		
	
		
		
			
				
					
					|  |  |  |     for entry in fs::read_dir(src)? { |  |  |  |     for entry in fs::read_dir(src)? { | 
			
		
	
	
		
		
			
				
					|  |  | 
 |