- VALIDATE configuration file (toml): - if format is valid - if required fields are present (packages) - if packages are valid -- VALIDATE: atomicity - if all packages are valid perform the link/unlink operation -- VALIDATE packages: - are not duplicated. What to do them? (ignore, error, warning) -- VALIDATE source file: - if exists - if is a file - if is readable -- VALIDATE destination file: - if exists - if is a file - if is writable - GENERATE: config file by scanning a directory and creating a package for each file - GENERATE: config file with default values - CROSS-SYSTEM: example of a symlink creation function that works on both unix and windows ```rust fn create_symlink(source: &Path, target: &Path) -> io::Result<()> { #[cfg(target_family = "unix")] std::os::unix::fs::symlink(source, target)?; #[cfg(target_family = "windows")] std::os::windows::fs::symlink_file(source, target)?; Ok(()) } ```