# ups-rs A rust implementation of a UPS file patcher. I am no rust expert, and this was made for me to actually learn rust, feel free to open an issue pointing any mistake you find. ## Usage ### Apply UPS patch: ```rust use ups::UpsPatch; use std::fs::File; use std::io::{Read, Write}; //Loading the contents of the source and patch files let mut source_file_content: Vec = vec![]; let mut patch_file_content: Vec = vec![]; let mut source_file = File::open("path/to/source/file")?; source_file.read_to_end(&mut source_file_content); let mut patch_file = File::open("path/to/patch/file")?; patch_file.read_to_end(&mut patch_file_content); //Apply the patch let patch = UpsPatch::load(&patch_file_content)?; let patched_file_content = patch.apply(&source_file_content)?; //Write the target to a file let mut target_file = File::open("path/to/target/file")?; target_file.write_all(&*patched_file_content); ``` ### Create UPS Patch ```rust use ups::UpsPatch; use std::fs::File; use std::io::{Read, Write}; //Load the contents of the source and patch files let mut source_file_content: Vec = vec![]; let mut target_file_content: Vec = vec![]; let mut source_file = File::open("path/to/source/file")?; source_file.read_to_end(&mut source_file_content); let mut target_file = File::open("path/to/patch/file")?; target_file.read_to_end(&mut target_file_content); //Create the UpsPatch let patch = UpsPatch::create(&source_file_content, &target_file_content); //Write the patch to a file let patch_file_content = patch.get_patch_file_contents(); let mut patch_file = File::open("path/to/target/file")?; patch_file.write_all(&patch_file_content); ``` ##Documentation The documentation is on [docs.rs](https://docs.rs/ups) ## Contributing: Feel free to submit pull requests with improvements. ## License All files in this repository except [UPS-spec.pdf](https://github.com/Laikar/ups-rs/blob/main/ups-spec.pdf "UPS-spec.pdf") and [ups_spec.md](https://github.com/Laikar/ups-rs/blob/main/ups_spec.md "ups_spec.md") are released under [MIT License](https://github.com/Laikar/ups-rs/blob/main/License.md "MIT License"). [ups-spec.pdf](https://github.com/Laikar/ups-rs/blob/main/ups-spec.pdf "ups-spec.pdf") is the original ups spec file released under [Attribution-NonCommercial-NoDerivs 3.0 Unported (CC BY-NC-ND 3.0)](https://creativecommons.org/licenses/by-nc-nd/3.0/ "Attribution-NonCommercial-NoDerivs 3.0 Unported (CC BY-NC-ND 3.0)"). [ups_spec.md](https://github.com/Laikar/ups-rs/blob/main/ups_spec.md "ups_spec.md") is a conversion of the original ups-spec.pdf into a more github friendly format, and keeps the same license as the original, [Attribution-NonCommercial-NoDerivs 3.0 Unported (CC BY-NC-ND 3.0)](https://creativecommons.org/licenses/by-nc-nd/3.0/ "Attribution-NonCommercial-NoDerivs 3.0 Unported (CC BY-NC-ND 3.0)")