Skip to content

[refactor] Create FileSystemEntryKind enum for explicit entry classification #262

@paul-fresquet

Description

@paul-fresquet

Summary

Create a new FileSystemEntryKind enum to explicitly classify filesystem entries by their actual type, replacing the current implicit binary classification (File/Directory).

Background

The current FileSystemTypes enum only supports two values:

public enum FileSystemTypes
{
    Directory = 1, 
    File = 2
}

This is insufficient to represent:

  • Symbolic links (currently filtered silently)
  • POSIX special files (block devices, character devices, FIFOs, sockets)
  • Unknown or unclassifiable entries

Proposed Enum

namespace ByteSync.Common.Business.Inventories;

[Flags]
public enum FileSystemEntryKind
{
    Unknown = 0,
    
    // Primary types (mutually exclusive in practice)
    RegularFile = 1 << 0,
    Directory = 1 << 1,
    Symlink = 1 << 2,
    
    // POSIX special files
    BlockDevice = 1 << 3,
    CharacterDevice = 1 << 4,
    Fifo = 1 << 5,
    Socket = 1 << 6,
    
    // Convenience masks
    SpecialPosix = BlockDevice | CharacterDevice | Fifo | Socket,
    NonTransferable = SpecialPosix | Symlink
}

Acceptance Criteria

  • Create FileSystemEntryKind enum in ByteSync.Common.Business.Inventories
  • Use [Flags] attribute for combinable values
  • Include convenience masks (SpecialPosix, NonTransferable)
  • Add XML documentation for each value
  • Ensure enum values don't conflict with existing FileSystemTypes

Technical Notes

  • This enum is for classification, not for replacing FileSystemTypes in existing models
  • FileSystemTypes remains for inventory part type (root is file vs directory)
  • FileSystemEntryKind is used during inspection/filtering decisions
  • The [Flags] design allows checking categories: kind.HasFlag(FileSystemEntryKind.SpecialPosix)

Priority

Important — Foundation for improved file classification system.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions