fmmap 0.4.0

A flexible and convenient high-level mmap for zero-copy file I/O.
Documentation
use crate::async_std::{AsyncMmapFileExt, AsyncMmapFileMutExt, AsyncOptions};
use crate::disk::MmapFileMutType;
use crate::error::{Error, ErrorKind};
use crate::utils::async_std::{
    create_file_async, open_exist_file_with_append_async, open_or_create_file_async,
    open_read_only_file_async, sync_parent_async,
};
use crate::MetaData;
use async_std::fs::{remove_file, File};
use async_std::path::{Path, PathBuf};

use fs4::async_std::AsyncFileExt;
use memmap2::{Mmap, MmapAsRawDesc, MmapMut, MmapOptions};
#[cfg(not(target_os = "linux"))]
use std::ptr::{drop_in_place, write};

remmap!(Path);

declare_and_impl_async_fmmap_file!("async_std_async", "async_std::task", "async_std", File);

declare_and_impl_async_fmmap_file_mut!(
    "async_std_async",
    "async_std::task",
    "async_std",
    File,
    AsyncDiskMmapFile
);

impl_async_fmmap_file_mut_private!(AsyncDiskMmapFileMut);

impl_async_tests!(
    "std_async_disk",
    async_std::test,
    async_std,
    AsyncDiskMmapFile,
    AsyncDiskMmapFileMut
);

#[cfg(test)]
mod test {
    use super::*;
    use scopeguard::defer;

    #[async_std::test]
    async fn test_close_with_truncate_on_empty_file() {
        let file =
            AsyncDiskMmapFileMut::create("async_std_async_disk_close_with_truncate_test.txt")
                .await
                .unwrap();
        defer!(std::fs::remove_file("async_std_async_disk_close_with_truncate_test.txt").unwrap());
        file.close_with_truncate(10).await.unwrap();

        assert_eq!(
            10,
            File::open("async_std_async_disk_close_with_truncate_test.txt")
                .await
                .unwrap()
                .metadata()
                .await
                .unwrap()
                .len()
        );
    }
}