diff --git a/src/file/checked.rs b/src/file/checked.rs index d8f1016..262e486 100644 --- a/src/file/checked.rs +++ b/src/file/checked.rs @@ -32,7 +32,8 @@ impl AsRef<[u8]> for Checked { } impl Checked { - pub(super) fn new_direct(path: PathBuf, size: u64, hash: Option) -> Self { + /// create this directly, without any checks + pub(super) unsafe fn new_unchecked(path: PathBuf, size: u64, hash: Option) -> Self { Self { path, size, hash } } @@ -93,9 +94,7 @@ impl Checked { ) -> crate::Result { let file_id = client.file_create(uri, alias_id, share_id, &self)?; - Ok(Uploading::new_direct( - self.path, self.size, self.hash, file_id, - )) + Ok(unsafe { Uploading::new_unchecked(self.path, self.size, self.hash, file_id) }) } } @@ -160,8 +159,8 @@ mod tests { "Checked", ); - // new_direct - let chk = Checked::new_direct(chk.path, chk.size, chk.hash); + // new unchecked + let chk = unsafe { Checked::new_unchecked(chk.path, chk.size, chk.hash) }; assert_eq!(chk.path, path); assert_eq!(chk.size, size); assert!(chk.hash.is_none()); diff --git a/src/file/chunk.rs b/src/file/chunk.rs index 0c22124..1a70600 100644 --- a/src/file/chunk.rs +++ b/src/file/chunk.rs @@ -40,7 +40,12 @@ where } impl<'t> Chunk<'t> { - pub(super) fn new_direct(file_id: sharry::FileID, offset: u64, data: &'t [u8]) -> Self { + /// create this directly, without any checks + pub(super) unsafe fn new_unchecked( + file_id: sharry::FileID, + offset: u64, + data: &'t [u8], + ) -> Self { Self { file_id, offset, @@ -83,9 +88,10 @@ mod tests { #[test] fn basic_tests() { + // items from `DATA_LENGTHS_BAD` used as mock offsets for (data, len, mock_offset) in cases_with(DATA_LENGTHS_BAD) { let fid = sharry::FileID::default(); - let chunk = Chunk::new_direct(fid, mock_offset, data); + let chunk = unsafe { Chunk::new_unchecked(fid, mock_offset, data) }; let repr_expect = format!( "Chunk {{ file_id: {:?}, offset: {:?}, data.len(): {:?}, .. }}", diff --git a/src/file/uploading.rs b/src/file/uploading.rs index a751497..6fce206 100644 --- a/src/file/uploading.rs +++ b/src/file/uploading.rs @@ -33,7 +33,8 @@ pub struct Uploading { } impl Uploading { - pub(super) fn new_direct( + /// create this directly, without any checks + pub(super) unsafe fn new_unchecked( path: PathBuf, size: u64, hash: Option, @@ -93,7 +94,8 @@ impl Uploading { )); } - let chunk = Chunk::new_direct(self.file_id.clone(), self.offset, &buf[..read_len]); + let chunk = + unsafe { Chunk::new_unchecked(self.file_id.clone(), self.offset, &buf[..read_len]) }; self.previous_offset = Some(self.offset); self.offset += chunk.get_length(); @@ -117,7 +119,7 @@ impl Uploading { /// /// - consume self, returning as a `file::Checked` pub fn stop(self) -> Checked { - Checked::new_direct(self.path, self.size, self.hash) + unsafe { Checked::new_unchecked(self.path, self.size, self.hash) } } }