Programming Language

Nocter

A self-contained systems language built around simplicity, encapsulation, and foolproof design.

/development/std/fs/filesystem.nct

filesystem.nct

//! Portable filesystem behavior built on stream and target contracts.

see ./index.nct
see ./darwin.nct

use /io.{File, Reader, Writer}
use /string.String
use /vec.Vec

copy struct Metadata {
    file_type: FileType
    len: u64
}

instance Metadata {
    method &self.file_type(): FileType {
        return self.file_type
    }

    method &self.len(): u64 {
        return self.len
    }

    method &self.is_file(): bool {
        if self.file_type is FileType.regular {
            return true
        }
        return false
    }

    method &self.is_directory(): bool {
        if self.file_type is FileType.directory {
            return true
        }
        return false
    }
}

func read(path: &str): Vec<u8>! {
    var file = File.open(path)?
    return file.read_to_end()?
}

func read_to_string(path: &str): String! {
    var file = File.open(path)?
    return file.read_to_string()?
}

func write(path: &str, value: &[u8]): void! {
    var file = File.create(path)?
    file.write(value)?
    return
}

func write_text(path: &str, text: &str): void! {
    var file = File.create(path)?
    file.write_text(text)?
    return
}

func metadata(path: &str): Metadata! {
    return metadata_target(path)?
}

func exists(path: &str): bool! {
    return exists_target(path)?
}

func remove_file(path: &str): void! {
    remove_file_target(path)?
    return
}

func rename(from: &str, to: &str): void! {
    rename_target(from, to)?
    return
}