- FilePath
- Create new files
- Create intermediate directories
- With specified contents
- Investigate if using stdio(3) operations instead of directly interacting with an open file descriptor would simplify usage
- Scanning and delimitting reads
- fscanf(3)
- FileScanner?
- getdelim(3)
- fscanf(3)
- Create new files
- DirectoryPath
- Get directory contents
- Get directory contents recursively
- Eagerly
- Lazily
- Create new directories
- Create intermediate directories
- Delete directories
- Recursively delete directory
- GenericPath (AKA all Paths)
- Change path ownership
- Change path permissions
- Allow octal numeric strings to be used for changing permissions
- Move paths
- Rename paths (move alias)
- URL conversion
- Get/generate temporary files/directories
- Copy paths
- Initialize from URLs
- TemporaryPaths
- Temporary path in closure (deleted afterwards)
- Base: Whether to generate or supply the root temporary directory
- OpenPaths
- Open only for closure
- Allow passing explicit buffer to avoid creating one on every
read
operation
- Misc. Additions
- Globbing
- LinkedPath (symlinks and hard links)
- Make Paths Codable
- APIs for checking permissions to a path
- canRead/Write/Execute/Delete == Whether or not the calling process (or specified uid/gid/username/groupname) can read/write/execute/delete the path
- mayRead/Write == Whether or not the path was opened with read/write permissions
- SocketPath
- FIFOPath?
- BlockPath?
- CharacterPath
- Place deleted items in trash (instead of deleting directly)
- Change CWD for closure only
- Pattern matching (~=)
- Useful operators (<<, >>, etc)
- Consolidate repeated/common errors
- Atomic writing (see Data.WritingOptions)
- Make sure we support common Data.ReadingOptions
- Investigate TypeErasure to see if it could benefit Paths and Open objects interact together more nicely
- Investigate ARC best-practices and see if memory usage/performance/correctness can be improved
- Investigate improved Hashable conformances
- Study the Ownership Manifesto to see if anything can have improved memory semantics/performance
- Investiagte class behaviors and ensure proper COW (or other) copy semantics
- Slicing/Collection APIs
- Sequence conformance
- Slicing
- Joining Slices
- Migrate usage examples to a separate Wiki
- Document performance pitfalls
- Make a FileSystem utility for easily getting some file system attributes
- Free/Used bytes
- Total size
- Type
- More?
- Annotate code with preconditions and assertions
- Investigate Domains
- https://developer.apple.com/documentation/foundation/filemanager/searchpathdomainmask
- User (~)
- System (/)
- Local (/usr/local)
- Network (??)
- All
- https://developer.apple.com/documentation/foundation/filemanager/searchpathdomainmask
- Investigate Common Search Paths
- Rebrand as PathMan
- Awesome logo/icon
- Crazy Stuff
-
URLPath
- Separate current
Path
protocol into aFileSystemPath
sub-protocol (only keeping relevant stuff inPath
) - Opening a
URLPath
downloads data? - Support relevant standards and common manipulations
- Separate current
-
- Validate code meets possible optimization points:
- Use more C-standard APIs to move away from only POSIX specific APIs (in preparation for Windows support)