syntax = "proto3";

package go.micro.runtime;

service Runtime {
	rpc Create(CreateRequest) returns (CreateResponse) {};
	rpc Get(GetRequest) returns (GetResponse) {};
	rpc Delete(DeleteRequest) returns (DeleteResponse) {};
	rpc Update(UpdateRequest) returns (UpdateResponse) {};
	rpc List(ListRequest) returns (ListResponse) {};
}

message Service {
	// name of the service
	string name = 1;
	// version of the service
	string version = 2;
	// git url of the source
	string source = 3;
	// local path of the source
	string path = 4;
	// command to execute
	repeated string exec = 5;
        // service metadata
        map<string,string> metadata = 6;
}

message CreateOptions {
	// command to pass in
	repeated string command = 1;
	// environment to pass in
	repeated string env = 2;
	// output to send to
	string output = 3;
}

message CreateRequest {
	Service service = 1;
	CreateOptions options = 2;
}

message CreateResponse {}

message GetOptions {
        // version of the service
        string version = 2;
}

message GetRequest {
        string name = 1;
        GetOptions options = 2;
}

message GetResponse {
        repeated Service services = 1;
}

message DeleteRequest {
	Service service = 1;
}

message DeleteResponse {}

message UpdateRequest {
	Service service = 1;
}

message UpdateResponse {}

message ListRequest {}

message ListResponse {
	repeated Service services = 1;
}