syntax = "proto3";

package controller.api.resources.scopes.v1;

option go_package = "github.com/hashicorp/boundary/internal/gen/controller/api/resources/scopes;scopes";

import "google/protobuf/timestamp.proto";
import "google/protobuf/wrappers.proto";
import "controller/custom_options/v1/options.proto";

message ScopeInfo {
	// Output only. The ID of the Scope.
	string id = 1;

	// Output only. The type of the Scope.
	string type = 2;

	// Output only. The name of the Scope, if any.
	string name = 3;

	// Output only. The description of the Scope, if any.
	string description = 4;

	// Output only. The ID of the parent Scope, if any. This field will be empty if this is the "global" scope.
	string parent_scope_id = 5 [json_name="parent_scope_id"];
}

// Scope contains all fields related to a Scope resource
message Scope {
	// Output only. The ID of the Scope.
	string id = 10;

	// The ID of the Scope this resource is in. If this is the "global" Scope this field will be empty.
	string scope_id = 20 [json_name="scope_id"];

	// Output only. Scope information for this resource.
	ScopeInfo scope = 30;

	// Optional name for identification purposes.
	google.protobuf.StringValue name = 40 [(custom_options.v1.generate_sdk_option) = true, (custom_options.v1.mask_mapping) = {this: "name" that: "name"}];

	// Optional user-set descripton for identification purposes.
	google.protobuf.StringValue description = 50 [(custom_options.v1.generate_sdk_option) = true, (custom_options.v1.mask_mapping) = {this: "description" that: "description"}];

	// Output only. The time this resource was created.
	google.protobuf.Timestamp created_time = 60 [json_name="created_time"];

	// Output only. The time this resource was last updated.
	google.protobuf.Timestamp updated_time = 70 [json_name="updated_time"];

	// Version is used in mutation requests, after the initial creation, to ensure this resource has not changed.
  // The mutation will fail if the version does not match the latest known good version.
	uint32 version = 80;

	// The type of the resource.
	string type = 90;
}
