syntax = "proto3";

package tvix.flatstore.v1;

message Path {
    bytes nar_hash = 1;

    oneof node {
        DirectoryNode directory = 2;
        FileNode file = 3;
        SymlinkNode symlink = 4;
    }
}

message DirectoryNode {
    bytes name = 1;
    repeated DirectoryNode directories = 2;
    repeated FileNode files = 3;
    repeated SymlinkNode symlinks = 4;
}

message FileNode {
    bytes name = 1;
    bytes hash = 2;
    repeated Chunk chunks = 3;
    bool executable = 4;
}

message Chunk {
    bytes hash = 1;
    uint32 size = 2;
    uint32 size_compressed = 3;
}

message SymlinkNode {
    bytes name = 1;
    bytes target = 2;
}
