syntax = "proto3"; package file; option go_package = "./proto;file"; service File { rpc Read(ReadRequest) returns (ReadResponse) {} rpc List(ListRequest) returns (ListResponse) {} rpc Save(SaveRequest) returns (SaveResponse) {} rpc BatchSave(BatchSaveRequest) returns (BatchSaveResponse) {} } message Record { // A custom project to group files // eg. file-of-mywebsite.com string project = 2; // Name of folder or file. string name = 3; // Path eg. '/documents/text-files'. Default is '/', ie. top level string path = 4; // Is it a directory (true) or a file (false) bool is_directory = 5; // File contents. Empty for directories. string data = 6; // Time the file was created, number of seconds since Unix epoch int64 created = 7; // Time the file was updated, number of seconds since Unix epoch int64 updated = 8; // Owner of the file e.g alice string owner = 9; // Any other associated metadata map metadata = 10; } // Batch save multiple files in one call message BatchSaveRequest { repeated Record files = 1; } message BatchSaveResponse { } // Read a file by path message ReadRequest { // Project name string project = 1; // Path to the file string path = 2; // File name string name = 3; } message ReadResponse { // Returns the file Record file = 1; } // Save a file message SaveRequest { Record file = 1; } message SaveResponse { } // List file by their project and optionally a path. message ListRequest { // Project, required for listing. string project = 1; // Defaults to '/', ie. lists all files in a project. // Supply path if of a folder if you want to list // files inside that folder // eg. '/docs' string path = 2; } message ListResponse { repeated Record files = 1; }