Initial commit
This commit is contained in:
		
						commit
						af372b21b0
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | |||||||
|  | /target/ | ||||||
|  | **/*.rs.bk | ||||||
							
								
								
									
										255
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										255
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,255 @@ | |||||||
|  | [[package]] | ||||||
|  | name = "adler32" | ||||||
|  | version = "1.0.2" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "bitflags" | ||||||
|  | version = "0.7.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "bitflags" | ||||||
|  | version = "1.0.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "byteorder" | ||||||
|  | version = "1.1.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "coco" | ||||||
|  | version = "0.1.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | dependencies = [ | ||||||
|  |  "either 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  |  "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "color_quant" | ||||||
|  | version = "1.0.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "deflate" | ||||||
|  | version = "0.7.17" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | dependencies = [ | ||||||
|  |  "adler32 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  |  "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "either" | ||||||
|  | version = "1.4.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "enum_primitive" | ||||||
|  | version = "0.1.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | dependencies = [ | ||||||
|  |  "num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "fuchsia-zircon" | ||||||
|  | version = "0.2.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | dependencies = [ | ||||||
|  |  "fuchsia-zircon-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "fuchsia-zircon-sys" | ||||||
|  | version = "0.2.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | dependencies = [ | ||||||
|  |  "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "gif" | ||||||
|  | version = "0.9.2" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | dependencies = [ | ||||||
|  |  "color_quant 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  |  "lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "image" | ||||||
|  | version = "0.17.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | dependencies = [ | ||||||
|  |  "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  |  "enum_primitive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  |  "gif 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  |  "jpeg-decoder 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  |  "num-iter 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  |  "num-rational 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  |  "num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  |  "png 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  |  "scoped_threadpool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "inflate" | ||||||
|  | version = "0.3.3" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | dependencies = [ | ||||||
|  |  "adler32 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "jpeg-decoder" | ||||||
|  | version = "0.1.13" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | dependencies = [ | ||||||
|  |  "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  |  "rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "lazy_static" | ||||||
|  | version = "0.2.11" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "libc" | ||||||
|  | version = "0.2.33" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "lzw" | ||||||
|  | version = "0.10.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "num-integer" | ||||||
|  | version = "0.1.35" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | dependencies = [ | ||||||
|  |  "num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "num-iter" | ||||||
|  | version = "0.1.34" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | dependencies = [ | ||||||
|  |  "num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  |  "num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "num-rational" | ||||||
|  | version = "0.1.40" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | dependencies = [ | ||||||
|  |  "num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  |  "num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "num-traits" | ||||||
|  | version = "0.1.40" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "num_cpus" | ||||||
|  | version = "1.7.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | dependencies = [ | ||||||
|  |  "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "png" | ||||||
|  | version = "0.11.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | dependencies = [ | ||||||
|  |  "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  |  "deflate 0.7.17 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  |  "inflate 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  |  "num-iter 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "psnr" | ||||||
|  | version = "0.1.0" | ||||||
|  | dependencies = [ | ||||||
|  |  "image 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "rand" | ||||||
|  | version = "0.3.18" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | dependencies = [ | ||||||
|  |  "fuchsia-zircon 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  |  "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "rayon" | ||||||
|  | version = "0.8.2" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | dependencies = [ | ||||||
|  |  "rayon-core 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "rayon-core" | ||||||
|  | version = "1.3.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | dependencies = [ | ||||||
|  |  "coco 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  |  "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  |  "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  |  "num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  |  "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "scoped_threadpool" | ||||||
|  | version = "0.1.8" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "scopeguard" | ||||||
|  | version = "0.3.3" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | 
 | ||||||
|  | [metadata] | ||||||
|  | "checksum adler32 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6cbd0b9af8587c72beadc9f72d35b9fbb070982c9e6203e46e93f10df25f8f45" | ||||||
|  | "checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d" | ||||||
|  | "checksum bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b3c30d3802dfb7281680d6285f2ccdaa8c2d8fee41f93805dba5c4cf50dc23cf" | ||||||
|  | "checksum byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ff81738b726f5d099632ceaffe7fb65b90212e8dce59d518729e7e8634032d3d" | ||||||
|  | "checksum coco 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c06169f5beb7e31c7c67ebf5540b8b472d23e3eade3b2ec7d1f5b504a85f91bd" | ||||||
|  | "checksum color_quant 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a475fc4af42d83d28adf72968d9bcfaf035a1a9381642d8e85d8a04957767b0d" | ||||||
|  | "checksum deflate 0.7.17 (registry+https://github.com/rust-lang/crates.io-index)" = "4dddda59aaab719767ab11d3efd9a714e95b610c4445d4435765021e9d52dfb1" | ||||||
|  | "checksum either 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "740178ddf48b1a9e878e6d6509a1442a2d42fd2928aae8e7a6f8a36fb01981b3" | ||||||
|  | "checksum enum_primitive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "be4551092f4d519593039259a9ed8daedf0da12e5109c5280338073eaeb81180" | ||||||
|  | "checksum fuchsia-zircon 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f6c0581a4e363262e52b87f59ee2afe3415361c6ec35e665924eb08afe8ff159" | ||||||
|  | "checksum fuchsia-zircon-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "43f3795b4bae048dc6123a6b972cadde2e676f9ded08aef6bb77f5f157684a82" | ||||||
|  | "checksum gif 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e2e41945ba23db3bf51b24756d73d81acb4f28d85c3dccc32c6fae904438c25f" | ||||||
|  | "checksum image 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d1576ffa01849c91b484b95c01d54dddc242b4d50923eaa2d4d74a58c4b9e8fd" | ||||||
|  | "checksum inflate 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "10ec05638adf7c5c788bc0cfa608cd479a13572beda20feb4898fe1d85d2c64b" | ||||||
|  | "checksum jpeg-decoder 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2805ccb10ffe4d10e06ef68a158ff94c255211ecbae848fbde2146b098f93ce7" | ||||||
|  | "checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" | ||||||
|  | "checksum libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "5ba3df4dcb460b9dfbd070d41c94c19209620c191b0340b929ce748a2bcd42d2" | ||||||
|  | "checksum lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7d947cbb889ed21c2a84be6ffbaebf5b4e0f4340638cba0444907e38b56be084" | ||||||
|  | "checksum num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "d1452e8b06e448a07f0e6ebb0bb1d92b8890eea63288c0b627331d53514d0fba" | ||||||
|  | "checksum num-iter 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)" = "7485fcc84f85b4ecd0ea527b14189281cf27d60e583ae65ebc9c088b13dffe01" | ||||||
|  | "checksum num-rational 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "0c7cb72a95250d8a370105c828f388932373e0e94414919891a0f945222310fe" | ||||||
|  | "checksum num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "99843c856d68d8b4313b03a17e33c4bb42ae8f6610ea81b28abe076ac721b9b0" | ||||||
|  | "checksum num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "514f0d73e64be53ff320680ca671b64fe3fb91da01e1ae2ddc99eb51d453b20d" | ||||||
|  | "checksum png 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f0b0cabbbd20c2d7f06dbf015e06aad59b6ca3d9ed14848783e98af9aaf19925" | ||||||
|  | "checksum rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)" = "6475140dfd8655aeb72e1fd4b7a1cc1c202be65d71669476e392fe62532b9edd" | ||||||
|  | "checksum rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b614fe08b6665cb9a231d07ac1364b0ef3cb3698f1239ee0c4c3a88a524f54c8" | ||||||
|  | "checksum rayon-core 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e64b609139d83da75902f88fd6c01820046840a18471e4dfcd5ac7c0f46bea53" | ||||||
|  | "checksum scoped_threadpool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "4ea459fe3ceff01e09534847c49860891d3ff1c12b4eb7731b67f2778fb60190" | ||||||
|  | "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" | ||||||
							
								
								
									
										7
									
								
								Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Cargo.toml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | [package] | ||||||
|  | name = "psnr" | ||||||
|  | version = "0.1.0" | ||||||
|  | authors = ["Thomas Forgione <thomas@tforgione.fr>"] | ||||||
|  | 
 | ||||||
|  | [dependencies] | ||||||
|  | image = "*" | ||||||
							
								
								
									
										81
									
								
								src/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								src/main.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,81 @@ | |||||||
|  | extern crate image; | ||||||
|  | 
 | ||||||
|  | use std::env::args; | ||||||
|  | use std::fs; | ||||||
|  | 
 | ||||||
|  | use image::{ImageResult, ImageError}; | ||||||
|  | 
 | ||||||
|  | const MAX: u32 = 255; | ||||||
|  | 
 | ||||||
|  | fn mse_files(path1: &str, path2: &str) -> ImageResult<f64> { | ||||||
|  | 
 | ||||||
|  |     let twenty_log10_max: f64 = 20.0 * (MAX as f64).log10(); | ||||||
|  | 
 | ||||||
|  |     let img1 = image::open(path1)?; | ||||||
|  |     let img2 = image::open(path2)?; | ||||||
|  | 
 | ||||||
|  |     use image::GenericImage; | ||||||
|  | 
 | ||||||
|  |     if img1.dimensions() != img2.dimensions() { | ||||||
|  |         return Err(ImageError::DimensionError); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     let mut mse = 0.0; | ||||||
|  | 
 | ||||||
|  |     for x in 0 .. img1.dimensions().0 { | ||||||
|  |         for y in 0 .. img1.dimensions().1 { | ||||||
|  |             let p1 = img1.get_pixel(x, y); | ||||||
|  |             let p2 = img2.get_pixel(x, y); | ||||||
|  | 
 | ||||||
|  |             let dx = p1[0] as f64 - p2[0] as f64; | ||||||
|  |             let dy = p1[1] as f64 - p2[1] as f64; | ||||||
|  |             let dz = p1[2] as f64 - p2[2] as f64; | ||||||
|  | 
 | ||||||
|  |             let dx = dx * dx; | ||||||
|  |             let dy = dy * dy; | ||||||
|  |             let dz = dz * dz; | ||||||
|  | 
 | ||||||
|  |             mse += dx + dy + dz; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     mse /= (img1.dimensions().0 * img1.dimensions().1 * 3) as f64; | ||||||
|  | 
 | ||||||
|  |     Ok(twenty_log10_max - 10.0 * mse.log10()) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | fn mse_dir(path1: &str, path2: &str) -> Vec<(String, ImageResult<f64>)> { | ||||||
|  |     let mut dirs1: Vec<_> = fs::read_dir(path1).unwrap() | ||||||
|  |         .map(|x|x.unwrap()) | ||||||
|  |         .filter(|x| x.file_name().into_string().unwrap().ends_with(".png")) | ||||||
|  |         .collect(); | ||||||
|  | 
 | ||||||
|  |     let mut dirs2: Vec<_> = fs::read_dir(path2).unwrap() | ||||||
|  |         .map(|x|x.unwrap()) | ||||||
|  |         .filter(|x| x.file_name().into_string().unwrap().ends_with(".png")) | ||||||
|  |         .collect(); | ||||||
|  | 
 | ||||||
|  |     dirs1.sort_by_key(|x| x.file_name()); | ||||||
|  |     dirs2.sort_by_key(|x| x.file_name()); | ||||||
|  | 
 | ||||||
|  |     let mut res = vec!(); | ||||||
|  | 
 | ||||||
|  |     for file in dirs1 { | ||||||
|  |         let p1 = path1.to_owned() + &file.file_name().to_owned().into_string().unwrap(); | ||||||
|  |         let p2 = path2.to_owned() + &file.file_name().to_owned().into_string().unwrap(); | ||||||
|  |         let mse = mse_files(&p1, &p2); | ||||||
|  | 
 | ||||||
|  |         let elt = (file.file_name().to_owned().into_string().unwrap(), mse.unwrap()); | ||||||
|  |         println!("{} {}", elt.0, elt.1); | ||||||
|  |         res.push((elt.0, Ok(elt.1))); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     res | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | fn main() { | ||||||
|  |     let path1 = args().nth(1).unwrap(); | ||||||
|  |     let path2 = args().nth(2).unwrap(); | ||||||
|  | 
 | ||||||
|  |     let _ = mse_dir(&path1, &path2); | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user