Thanks to visit codestin.com
Credit goes to lib.rs

#filetype #api-bindings

file_type_enum

An enum with a variant for each file type

13 releases (5 stable)

Uses new Rust 2024

3.0.1 Jan 25, 2026
3.0.0 Jan 24, 2026
2.0.1 Oct 3, 2023
1.0.1 Aug 17, 2022
0.9.1 Sep 13, 2020

#261 in Filesystem

Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App

4,131 downloads per month
Used in 2 crates

MIT license

16KB
169 lines

file_type_enum

An enum with a variant for each file type.

pub enum FileType {
    Regular,
    Directory,
    Symlink,
    BlockDevice, // unix only
    CharDevice,  // unix only
    Fifo,        // unix only
    Socket,      // unix only
}

Alternatives:

  1. If you want an enum tree, check the crate fs-tree.
  2. If you don't need an enum, check these methods from std instead:

Example:

use std::{fs, io, path::Path};

use file_type_enum::FileType;

fn move_file(from: &Path, to: &Path) -> io::Result<()> {
    let from_type = FileType::symlink_read_at(from)?;
    let to_type = FileType::symlink_read_at(to)?;

    use FileType::{Directory, Regular, Symlink};

    match (from_type, to_type) {
        (Directory, Directory) => {
            println!("Replacing directory {to:?} by directory {from:?}.");
        }
        (Regular, Regular) | (Symlink, Symlink) => {
            // Might print:
            //       "Overwriting regular file at PATH."
            //       "Overwriting symbolic link at PATH."
            println!("Overwriting {to_type} at {to:?} with {from:?}.");
        }
        (_, Directory) => {
            println!("Moving file at {from:?} into folder {to:?}.");
            fs::rename(from, to)?;
        }
        (_, _) => {
            // Might print:
            // -   "Cannot overwrite regular file  with a symbolic link."
            // -   "Cannot overwrite directory     with a symbolic link."
            // -   "Cannot overwrite symbolic link with a regular file."
            panic!("Cannot overwrite {to_type} with a {from_type}.");
        }
    }

    Ok(())
}

As shown in the example FileType also implements Display.

Warning

Note that, like std functions, FileType::read_at follows symlinks, therefore it is impossible to get the FileType::Symlink variant. If you want symlink-awareness, use FileType::symlink_read_at instead.

Conversions

Feature flags

  • fs-err (enabled by default): uses fs-err for better IO error messages.
  • libc: gives libc enum conversions.

Dependencies

~105KB