1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
use error::GradleResult; use error::Error; use buffer::GradleBuffer; use std::fs::File; use std::fs::OpenOptions; use semver::Version; pub struct GradleFile { filename: String, buffer: GradleBuffer } impl GradleFile { pub fn new(filename: &str) -> GradleResult<Self> { let fd = File::open(filename) .map_err(|_err| { let reason = format!("failed to read file: {}", filename); Error::IoError(reason) })?; let buffer = GradleBuffer::from(fd)?; Ok(Self { filename: filename.to_string(), buffer }) } pub fn new_and_sync_with_cargo(filename: &str) -> GradleResult<()> { let mut gradle_file = GradleFile::new(filename)?; gradle_file.synchronize_version(env!("CARGO_PKG_VERSION"))?; gradle_file.write()?; Ok(()) } pub fn synchronize_version(&mut self, version_name: &str) -> GradleResult<()> { let version = sem_version_parse(version_name)?; self.buffer.synchronize_version(&version)?; Ok(()) } pub fn write(&self) -> GradleResult<()> { let mut fd = OpenOptions::new() .write(true) .create(true) .open(&self.filename).map_err(|_err| { let reason = format!("failed to open file for reading '{}'", self.filename); Error::IoError(reason) })?; self.buffer.write(&mut fd) } } fn sem_version_parse(version_string: &str) -> GradleResult<Version> { let version = Version::parse(version_string); match version { Err(_) => { let reason = format!("failed to parse version string '{}'", version_string); Err(Error::ParsingFailed(reason)) }, Ok(version) => Ok(version) } }