shao 2 天之前
父节点
当前提交
095f02566c

+ 0 - 10
dr_protocol_idl.proto

@@ -13,18 +13,8 @@ message IDRequest {
   optional string instance_id = 2;
 }
 
-message OptionRequest {
-  string group = 1;
-  string flag = 2;
-}
-
-message OptionReply {
-  repeated google.protobuf.Struct option = 1;
-}
-
 service Basic {
   rpc SoftwareInfo (EmptyRequest) returns (SoftwareInfoReply) {}
-  rpc GetOptions (OptionRequest) returns (OptionReply) {}
 }
 
 message SoftwareInfoReply {

+ 103 - 211
dr_protocol_pb/dr_protocol_idl.pb.go

@@ -110,102 +110,6 @@ func (x *IDRequest) GetInstanceId() string {
 	return ""
 }
 
-type OptionRequest struct {
-	state         protoimpl.MessageState `protogen:"open.v1"`
-	Group         string                 `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"`
-	Flag          string                 `protobuf:"bytes,2,opt,name=flag,proto3" json:"flag,omitempty"`
-	unknownFields protoimpl.UnknownFields
-	sizeCache     protoimpl.SizeCache
-}
-
-func (x *OptionRequest) Reset() {
-	*x = OptionRequest{}
-	mi := &file_dr_protocol_idl_proto_msgTypes[2]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
-}
-
-func (x *OptionRequest) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*OptionRequest) ProtoMessage() {}
-
-func (x *OptionRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_protocol_idl_proto_msgTypes[2]
-	if x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use OptionRequest.ProtoReflect.Descriptor instead.
-func (*OptionRequest) Descriptor() ([]byte, []int) {
-	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{2}
-}
-
-func (x *OptionRequest) GetGroup() string {
-	if x != nil {
-		return x.Group
-	}
-	return ""
-}
-
-func (x *OptionRequest) GetFlag() string {
-	if x != nil {
-		return x.Flag
-	}
-	return ""
-}
-
-type OptionReply struct {
-	state         protoimpl.MessageState `protogen:"open.v1"`
-	Option        []*structpb.Struct     `protobuf:"bytes,1,rep,name=option,proto3" json:"option,omitempty"`
-	unknownFields protoimpl.UnknownFields
-	sizeCache     protoimpl.SizeCache
-}
-
-func (x *OptionReply) Reset() {
-	*x = OptionReply{}
-	mi := &file_dr_protocol_idl_proto_msgTypes[3]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
-}
-
-func (x *OptionReply) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*OptionReply) ProtoMessage() {}
-
-func (x *OptionReply) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_protocol_idl_proto_msgTypes[3]
-	if x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use OptionReply.ProtoReflect.Descriptor instead.
-func (*OptionReply) Descriptor() ([]byte, []int) {
-	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{3}
-}
-
-func (x *OptionReply) GetOption() []*structpb.Struct {
-	if x != nil {
-		return x.Option
-	}
-	return nil
-}
-
 type SoftwareInfoReply struct {
 	state         protoimpl.MessageState `protogen:"open.v1"`
 	Module        string                 `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"`
@@ -218,7 +122,7 @@ type SoftwareInfoReply struct {
 
 func (x *SoftwareInfoReply) Reset() {
 	*x = SoftwareInfoReply{}
-	mi := &file_dr_protocol_idl_proto_msgTypes[4]
+	mi := &file_dr_protocol_idl_proto_msgTypes[2]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -230,7 +134,7 @@ func (x *SoftwareInfoReply) String() string {
 func (*SoftwareInfoReply) ProtoMessage() {}
 
 func (x *SoftwareInfoReply) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_protocol_idl_proto_msgTypes[4]
+	mi := &file_dr_protocol_idl_proto_msgTypes[2]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -243,7 +147,7 @@ func (x *SoftwareInfoReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SoftwareInfoReply.ProtoReflect.Descriptor instead.
 func (*SoftwareInfoReply) Descriptor() ([]byte, []int) {
-	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{4}
+	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{2}
 }
 
 func (x *SoftwareInfoReply) GetModule() string {
@@ -284,7 +188,7 @@ type PatientTypeRequest struct {
 
 func (x *PatientTypeRequest) Reset() {
 	*x = PatientTypeRequest{}
-	mi := &file_dr_protocol_idl_proto_msgTypes[5]
+	mi := &file_dr_protocol_idl_proto_msgTypes[3]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -296,7 +200,7 @@ func (x *PatientTypeRequest) String() string {
 func (*PatientTypeRequest) ProtoMessage() {}
 
 func (x *PatientTypeRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_protocol_idl_proto_msgTypes[5]
+	mi := &file_dr_protocol_idl_proto_msgTypes[3]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -309,7 +213,7 @@ func (x *PatientTypeRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use PatientTypeRequest.ProtoReflect.Descriptor instead.
 func (*PatientTypeRequest) Descriptor() ([]byte, []int) {
-	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{5}
+	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{3}
 }
 
 func (x *PatientTypeRequest) GetIsEnabled() bool {
@@ -343,7 +247,7 @@ type PatientType struct {
 
 func (x *PatientType) Reset() {
 	*x = PatientType{}
-	mi := &file_dr_protocol_idl_proto_msgTypes[6]
+	mi := &file_dr_protocol_idl_proto_msgTypes[4]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -355,7 +259,7 @@ func (x *PatientType) String() string {
 func (*PatientType) ProtoMessage() {}
 
 func (x *PatientType) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_protocol_idl_proto_msgTypes[6]
+	mi := &file_dr_protocol_idl_proto_msgTypes[4]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -368,7 +272,7 @@ func (x *PatientType) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use PatientType.ProtoReflect.Descriptor instead.
 func (*PatientType) Descriptor() ([]byte, []int) {
-	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{6}
+	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{4}
 }
 
 func (x *PatientType) GetId() uint64 {
@@ -443,7 +347,7 @@ type PatientTypeReply struct {
 
 func (x *PatientTypeReply) Reset() {
 	*x = PatientTypeReply{}
-	mi := &file_dr_protocol_idl_proto_msgTypes[7]
+	mi := &file_dr_protocol_idl_proto_msgTypes[5]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -455,7 +359,7 @@ func (x *PatientTypeReply) String() string {
 func (*PatientTypeReply) ProtoMessage() {}
 
 func (x *PatientTypeReply) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_protocol_idl_proto_msgTypes[7]
+	mi := &file_dr_protocol_idl_proto_msgTypes[5]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -468,7 +372,7 @@ func (x *PatientTypeReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use PatientTypeReply.ProtoReflect.Descriptor instead.
 func (*PatientTypeReply) Descriptor() ([]byte, []int) {
-	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{7}
+	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{5}
 }
 
 func (x *PatientTypeReply) GetPatientTypeList() []*PatientType {
@@ -490,7 +394,7 @@ type BodyPartRequest struct {
 
 func (x *BodyPartRequest) Reset() {
 	*x = BodyPartRequest{}
-	mi := &file_dr_protocol_idl_proto_msgTypes[8]
+	mi := &file_dr_protocol_idl_proto_msgTypes[6]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -502,7 +406,7 @@ func (x *BodyPartRequest) String() string {
 func (*BodyPartRequest) ProtoMessage() {}
 
 func (x *BodyPartRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_protocol_idl_proto_msgTypes[8]
+	mi := &file_dr_protocol_idl_proto_msgTypes[6]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -515,7 +419,7 @@ func (x *BodyPartRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use BodyPartRequest.ProtoReflect.Descriptor instead.
 func (*BodyPartRequest) Descriptor() ([]byte, []int) {
-	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{8}
+	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{6}
 }
 
 func (x *BodyPartRequest) GetPatientType() string {
@@ -565,7 +469,7 @@ type BodyPart struct {
 
 func (x *BodyPart) Reset() {
 	*x = BodyPart{}
-	mi := &file_dr_protocol_idl_proto_msgTypes[9]
+	mi := &file_dr_protocol_idl_proto_msgTypes[7]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -577,7 +481,7 @@ func (x *BodyPart) String() string {
 func (*BodyPart) ProtoMessage() {}
 
 func (x *BodyPart) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_protocol_idl_proto_msgTypes[9]
+	mi := &file_dr_protocol_idl_proto_msgTypes[7]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -590,7 +494,7 @@ func (x *BodyPart) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use BodyPart.ProtoReflect.Descriptor instead.
 func (*BodyPart) Descriptor() ([]byte, []int) {
-	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{9}
+	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{7}
 }
 
 func (x *BodyPart) GetId() uint64 {
@@ -679,7 +583,7 @@ type BodyPartReply struct {
 
 func (x *BodyPartReply) Reset() {
 	*x = BodyPartReply{}
-	mi := &file_dr_protocol_idl_proto_msgTypes[10]
+	mi := &file_dr_protocol_idl_proto_msgTypes[8]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -691,7 +595,7 @@ func (x *BodyPartReply) String() string {
 func (*BodyPartReply) ProtoMessage() {}
 
 func (x *BodyPartReply) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_protocol_idl_proto_msgTypes[10]
+	mi := &file_dr_protocol_idl_proto_msgTypes[8]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -704,7 +608,7 @@ func (x *BodyPartReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use BodyPartReply.ProtoReflect.Descriptor instead.
 func (*BodyPartReply) Descriptor() ([]byte, []int) {
-	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{10}
+	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{8}
 }
 
 func (x *BodyPartReply) GetBodyPartList() []*BodyPart {
@@ -727,7 +631,7 @@ type ProcedureRequest struct {
 
 func (x *ProcedureRequest) Reset() {
 	*x = ProcedureRequest{}
-	mi := &file_dr_protocol_idl_proto_msgTypes[11]
+	mi := &file_dr_protocol_idl_proto_msgTypes[9]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -739,7 +643,7 @@ func (x *ProcedureRequest) String() string {
 func (*ProcedureRequest) ProtoMessage() {}
 
 func (x *ProcedureRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_protocol_idl_proto_msgTypes[11]
+	mi := &file_dr_protocol_idl_proto_msgTypes[9]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -752,7 +656,7 @@ func (x *ProcedureRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ProcedureRequest.ProtoReflect.Descriptor instead.
 func (*ProcedureRequest) Descriptor() ([]byte, []int) {
-	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{11}
+	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{9}
 }
 
 func (x *ProcedureRequest) GetPatientType() string {
@@ -817,7 +721,7 @@ type Procedure struct {
 
 func (x *Procedure) Reset() {
 	*x = Procedure{}
-	mi := &file_dr_protocol_idl_proto_msgTypes[12]
+	mi := &file_dr_protocol_idl_proto_msgTypes[10]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -829,7 +733,7 @@ func (x *Procedure) String() string {
 func (*Procedure) ProtoMessage() {}
 
 func (x *Procedure) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_protocol_idl_proto_msgTypes[12]
+	mi := &file_dr_protocol_idl_proto_msgTypes[10]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -842,7 +746,7 @@ func (x *Procedure) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use Procedure.ProtoReflect.Descriptor instead.
 func (*Procedure) Descriptor() ([]byte, []int) {
-	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{12}
+	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{10}
 }
 
 func (x *Procedure) GetId() uint64 {
@@ -987,7 +891,7 @@ type ProcedureReply struct {
 
 func (x *ProcedureReply) Reset() {
 	*x = ProcedureReply{}
-	mi := &file_dr_protocol_idl_proto_msgTypes[13]
+	mi := &file_dr_protocol_idl_proto_msgTypes[11]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -999,7 +903,7 @@ func (x *ProcedureReply) String() string {
 func (*ProcedureReply) ProtoMessage() {}
 
 func (x *ProcedureReply) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_protocol_idl_proto_msgTypes[13]
+	mi := &file_dr_protocol_idl_proto_msgTypes[11]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1012,7 +916,7 @@ func (x *ProcedureReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ProcedureReply.ProtoReflect.Descriptor instead.
 func (*ProcedureReply) Descriptor() ([]byte, []int) {
-	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{13}
+	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{11}
 }
 
 func (x *ProcedureReply) GetProcedureList() []*Procedure {
@@ -1036,7 +940,7 @@ type ViewRequest struct {
 
 func (x *ViewRequest) Reset() {
 	*x = ViewRequest{}
-	mi := &file_dr_protocol_idl_proto_msgTypes[14]
+	mi := &file_dr_protocol_idl_proto_msgTypes[12]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1048,7 +952,7 @@ func (x *ViewRequest) String() string {
 func (*ViewRequest) ProtoMessage() {}
 
 func (x *ViewRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_protocol_idl_proto_msgTypes[14]
+	mi := &file_dr_protocol_idl_proto_msgTypes[12]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1061,7 +965,7 @@ func (x *ViewRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ViewRequest.ProtoReflect.Descriptor instead.
 func (*ViewRequest) Descriptor() ([]byte, []int) {
-	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{14}
+	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{12}
 }
 
 func (x *ViewRequest) GetPatientType() string {
@@ -1137,7 +1041,7 @@ type View struct {
 
 func (x *View) Reset() {
 	*x = View{}
-	mi := &file_dr_protocol_idl_proto_msgTypes[15]
+	mi := &file_dr_protocol_idl_proto_msgTypes[13]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1149,7 +1053,7 @@ func (x *View) String() string {
 func (*View) ProtoMessage() {}
 
 func (x *View) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_protocol_idl_proto_msgTypes[15]
+	mi := &file_dr_protocol_idl_proto_msgTypes[13]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1162,7 +1066,7 @@ func (x *View) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use View.ProtoReflect.Descriptor instead.
 func (*View) Descriptor() ([]byte, []int) {
-	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{15}
+	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{13}
 }
 
 func (x *View) GetInternalId() string {
@@ -1335,7 +1239,7 @@ type ViewReply struct {
 
 func (x *ViewReply) Reset() {
 	*x = ViewReply{}
-	mi := &file_dr_protocol_idl_proto_msgTypes[16]
+	mi := &file_dr_protocol_idl_proto_msgTypes[14]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1347,7 +1251,7 @@ func (x *ViewReply) String() string {
 func (*ViewReply) ProtoMessage() {}
 
 func (x *ViewReply) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_protocol_idl_proto_msgTypes[16]
+	mi := &file_dr_protocol_idl_proto_msgTypes[14]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1360,7 +1264,7 @@ func (x *ViewReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ViewReply.ProtoReflect.Descriptor instead.
 func (*ViewReply) Descriptor() ([]byte, []int) {
-	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{16}
+	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{14}
 }
 
 func (x *ViewReply) GetViewList() []*View {
@@ -1381,7 +1285,7 @@ type AprRequest struct {
 
 func (x *AprRequest) Reset() {
 	*x = AprRequest{}
-	mi := &file_dr_protocol_idl_proto_msgTypes[17]
+	mi := &file_dr_protocol_idl_proto_msgTypes[15]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1393,7 +1297,7 @@ func (x *AprRequest) String() string {
 func (*AprRequest) ProtoMessage() {}
 
 func (x *AprRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_protocol_idl_proto_msgTypes[17]
+	mi := &file_dr_protocol_idl_proto_msgTypes[15]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1406,7 +1310,7 @@ func (x *AprRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AprRequest.ProtoReflect.Descriptor instead.
 func (*AprRequest) Descriptor() ([]byte, []int) {
-	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{17}
+	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{15}
 }
 
 func (x *AprRequest) GetViewId() string {
@@ -1441,7 +1345,7 @@ type AprSub struct {
 
 func (x *AprSub) Reset() {
 	*x = AprSub{}
-	mi := &file_dr_protocol_idl_proto_msgTypes[18]
+	mi := &file_dr_protocol_idl_proto_msgTypes[16]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1453,7 +1357,7 @@ func (x *AprSub) String() string {
 func (*AprSub) ProtoMessage() {}
 
 func (x *AprSub) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_protocol_idl_proto_msgTypes[18]
+	mi := &file_dr_protocol_idl_proto_msgTypes[16]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1466,7 +1370,7 @@ func (x *AprSub) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AprSub.ProtoReflect.Descriptor instead.
 func (*AprSub) Descriptor() ([]byte, []int) {
-	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{18}
+	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{16}
 }
 
 func (x *AprSub) GetWorkStationId() int32 {
@@ -1511,7 +1415,7 @@ type AprReply struct {
 
 func (x *AprReply) Reset() {
 	*x = AprReply{}
-	mi := &file_dr_protocol_idl_proto_msgTypes[19]
+	mi := &file_dr_protocol_idl_proto_msgTypes[17]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1523,7 +1427,7 @@ func (x *AprReply) String() string {
 func (*AprReply) ProtoMessage() {}
 
 func (x *AprReply) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_protocol_idl_proto_msgTypes[19]
+	mi := &file_dr_protocol_idl_proto_msgTypes[17]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1536,7 +1440,7 @@ func (x *AprReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AprReply.ProtoReflect.Descriptor instead.
 func (*AprReply) Descriptor() ([]byte, []int) {
-	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{19}
+	return file_dr_protocol_idl_proto_rawDescGZIP(), []int{17}
 }
 
 func (x *AprReply) GetAprId() string {
@@ -1641,12 +1545,7 @@ const file_dr_protocol_idl_proto_rawDesc = "" +
 	"\vinstance_id\x18\x02 \x01(\tH\x01R\n" +
 	"instanceId\x88\x01\x01B\x05\n" +
 	"\x03_idB\x0e\n" +
-	"\f_instance_id\"9\n" +
-	"\rOptionRequest\x12\x14\n" +
-	"\x05group\x18\x01 \x01(\tR\x05group\x12\x12\n" +
-	"\x04flag\x18\x02 \x01(\tR\x04flag\">\n" +
-	"\vOptionReply\x12/\n" +
-	"\x06option\x18\x01 \x03(\v2\x17.google.protobuf.StructR\x06option\"o\n" +
+	"\f_instance_id\"o\n" +
 	"\x11SoftwareInfoReply\x12\x16\n" +
 	"\x06module\x18\x01 \x01(\tR\x06module\x12\x12\n" +
 	"\x04desc\x18\x02 \x01(\tR\x04desc\x12\x14\n" +
@@ -1812,11 +1711,9 @@ const file_dr_protocol_idl_proto_rawDesc = "" +
 	"\n" +
 	"is_enabled\x18\v \x01(\bR\tisEnabled\x12\x18\n" +
 	"\aproduct\x18\f \x01(\tR\aproduct\x12$\n" +
-	"\x0eis_pre_install\x18\r \x01(\bR\fisPreInstall2\x9a\x01\n" +
+	"\x0eis_pre_install\x18\r \x01(\bR\fisPreInstall2T\n" +
 	"\x05Basic\x12K\n" +
-	"\fSoftwareInfo\x12\x19.dr.protocol.EmptyRequest\x1a\x1e.dr.protocol.SoftwareInfoReply\"\x00\x12D\n" +
-	"\n" +
-	"GetOptions\x12\x1a.dr.protocol.OptionRequest\x1a\x18.dr.protocol.OptionReply\"\x002\xc0\x03\n" +
+	"\fSoftwareInfo\x12\x19.dr.protocol.EmptyRequest\x1a\x1e.dr.protocol.SoftwareInfoReply\"\x002\xc0\x03\n" +
 	"\bProtocol\x12V\n" +
 	"\x12GetPatientTypeList\x12\x1f.dr.protocol.PatientTypeRequest\x1a\x1d.dr.protocol.PatientTypeReply\"\x00\x12M\n" +
 	"\x0fGetBodyPartList\x12\x1c.dr.protocol.BodyPartRequest\x1a\x1a.dr.protocol.BodyPartReply\"\x00\x12P\n" +
@@ -1839,62 +1736,57 @@ func file_dr_protocol_idl_proto_rawDescGZIP() []byte {
 	return file_dr_protocol_idl_proto_rawDescData
 }
 
-var file_dr_protocol_idl_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
+var file_dr_protocol_idl_proto_msgTypes = make([]protoimpl.MessageInfo, 18)
 var file_dr_protocol_idl_proto_goTypes = []any{
 	(*EmptyRequest)(nil),       // 0: dr.protocol.EmptyRequest
 	(*IDRequest)(nil),          // 1: dr.protocol.IDRequest
-	(*OptionRequest)(nil),      // 2: dr.protocol.OptionRequest
-	(*OptionReply)(nil),        // 3: dr.protocol.OptionReply
-	(*SoftwareInfoReply)(nil),  // 4: dr.protocol.SoftwareInfoReply
-	(*PatientTypeRequest)(nil), // 5: dr.protocol.PatientTypeRequest
-	(*PatientType)(nil),        // 6: dr.protocol.PatientType
-	(*PatientTypeReply)(nil),   // 7: dr.protocol.PatientTypeReply
-	(*BodyPartRequest)(nil),    // 8: dr.protocol.BodyPartRequest
-	(*BodyPart)(nil),           // 9: dr.protocol.BodyPart
-	(*BodyPartReply)(nil),      // 10: dr.protocol.BodyPartReply
-	(*ProcedureRequest)(nil),   // 11: dr.protocol.ProcedureRequest
-	(*Procedure)(nil),          // 12: dr.protocol.Procedure
-	(*ProcedureReply)(nil),     // 13: dr.protocol.ProcedureReply
-	(*ViewRequest)(nil),        // 14: dr.protocol.ViewRequest
-	(*View)(nil),               // 15: dr.protocol.View
-	(*ViewReply)(nil),          // 16: dr.protocol.ViewReply
-	(*AprRequest)(nil),         // 17: dr.protocol.AprRequest
-	(*AprSub)(nil),             // 18: dr.protocol.AprSub
-	(*AprReply)(nil),           // 19: dr.protocol.AprReply
-	(*structpb.Struct)(nil),    // 20: google.protobuf.Struct
+	(*SoftwareInfoReply)(nil),  // 2: dr.protocol.SoftwareInfoReply
+	(*PatientTypeRequest)(nil), // 3: dr.protocol.PatientTypeRequest
+	(*PatientType)(nil),        // 4: dr.protocol.PatientType
+	(*PatientTypeReply)(nil),   // 5: dr.protocol.PatientTypeReply
+	(*BodyPartRequest)(nil),    // 6: dr.protocol.BodyPartRequest
+	(*BodyPart)(nil),           // 7: dr.protocol.BodyPart
+	(*BodyPartReply)(nil),      // 8: dr.protocol.BodyPartReply
+	(*ProcedureRequest)(nil),   // 9: dr.protocol.ProcedureRequest
+	(*Procedure)(nil),          // 10: dr.protocol.Procedure
+	(*ProcedureReply)(nil),     // 11: dr.protocol.ProcedureReply
+	(*ViewRequest)(nil),        // 12: dr.protocol.ViewRequest
+	(*View)(nil),               // 13: dr.protocol.View
+	(*ViewReply)(nil),          // 14: dr.protocol.ViewReply
+	(*AprRequest)(nil),         // 15: dr.protocol.AprRequest
+	(*AprSub)(nil),             // 16: dr.protocol.AprSub
+	(*AprReply)(nil),           // 17: dr.protocol.AprReply
+	(*structpb.Struct)(nil),    // 18: google.protobuf.Struct
 }
 var file_dr_protocol_idl_proto_depIdxs = []int32{
-	20, // 0: dr.protocol.OptionReply.option:type_name -> google.protobuf.Struct
-	6,  // 1: dr.protocol.PatientTypeReply.patient_type_list:type_name -> dr.protocol.PatientType
-	9,  // 2: dr.protocol.BodyPartReply.body_part_list:type_name -> dr.protocol.BodyPart
-	12, // 3: dr.protocol.ProcedureReply.procedure_list:type_name -> dr.protocol.Procedure
-	20, // 4: dr.protocol.View.config_object:type_name -> google.protobuf.Struct
-	15, // 5: dr.protocol.ViewReply.view_list:type_name -> dr.protocol.View
-	20, // 6: dr.protocol.AprSub.config_object:type_name -> google.protobuf.Struct
-	18, // 7: dr.protocol.AprReply.sub:type_name -> dr.protocol.AprSub
-	0,  // 8: dr.protocol.Basic.SoftwareInfo:input_type -> dr.protocol.EmptyRequest
-	2,  // 9: dr.protocol.Basic.GetOptions:input_type -> dr.protocol.OptionRequest
-	5,  // 10: dr.protocol.Protocol.GetPatientTypeList:input_type -> dr.protocol.PatientTypeRequest
-	8,  // 11: dr.protocol.Protocol.GetBodyPartList:input_type -> dr.protocol.BodyPartRequest
-	11, // 12: dr.protocol.Protocol.GetProcedureList:input_type -> dr.protocol.ProcedureRequest
-	1,  // 13: dr.protocol.Protocol.GetProcedure:input_type -> dr.protocol.IDRequest
-	14, // 14: dr.protocol.Protocol.GetViewList:input_type -> dr.protocol.ViewRequest
-	1,  // 15: dr.protocol.Protocol.GetView:input_type -> dr.protocol.IDRequest
-	17, // 16: dr.protocol.Apr.GetApr:input_type -> dr.protocol.AprRequest
-	4,  // 17: dr.protocol.Basic.SoftwareInfo:output_type -> dr.protocol.SoftwareInfoReply
-	3,  // 18: dr.protocol.Basic.GetOptions:output_type -> dr.protocol.OptionReply
-	7,  // 19: dr.protocol.Protocol.GetPatientTypeList:output_type -> dr.protocol.PatientTypeReply
-	10, // 20: dr.protocol.Protocol.GetBodyPartList:output_type -> dr.protocol.BodyPartReply
-	13, // 21: dr.protocol.Protocol.GetProcedureList:output_type -> dr.protocol.ProcedureReply
-	12, // 22: dr.protocol.Protocol.GetProcedure:output_type -> dr.protocol.Procedure
-	16, // 23: dr.protocol.Protocol.GetViewList:output_type -> dr.protocol.ViewReply
-	15, // 24: dr.protocol.Protocol.GetView:output_type -> dr.protocol.View
-	19, // 25: dr.protocol.Apr.GetApr:output_type -> dr.protocol.AprReply
-	17, // [17:26] is the sub-list for method output_type
-	8,  // [8:17] is the sub-list for method input_type
-	8,  // [8:8] is the sub-list for extension type_name
-	8,  // [8:8] is the sub-list for extension extendee
-	0,  // [0:8] is the sub-list for field type_name
+	4,  // 0: dr.protocol.PatientTypeReply.patient_type_list:type_name -> dr.protocol.PatientType
+	7,  // 1: dr.protocol.BodyPartReply.body_part_list:type_name -> dr.protocol.BodyPart
+	10, // 2: dr.protocol.ProcedureReply.procedure_list:type_name -> dr.protocol.Procedure
+	18, // 3: dr.protocol.View.config_object:type_name -> google.protobuf.Struct
+	13, // 4: dr.protocol.ViewReply.view_list:type_name -> dr.protocol.View
+	18, // 5: dr.protocol.AprSub.config_object:type_name -> google.protobuf.Struct
+	16, // 6: dr.protocol.AprReply.sub:type_name -> dr.protocol.AprSub
+	0,  // 7: dr.protocol.Basic.SoftwareInfo:input_type -> dr.protocol.EmptyRequest
+	3,  // 8: dr.protocol.Protocol.GetPatientTypeList:input_type -> dr.protocol.PatientTypeRequest
+	6,  // 9: dr.protocol.Protocol.GetBodyPartList:input_type -> dr.protocol.BodyPartRequest
+	9,  // 10: dr.protocol.Protocol.GetProcedureList:input_type -> dr.protocol.ProcedureRequest
+	1,  // 11: dr.protocol.Protocol.GetProcedure:input_type -> dr.protocol.IDRequest
+	12, // 12: dr.protocol.Protocol.GetViewList:input_type -> dr.protocol.ViewRequest
+	1,  // 13: dr.protocol.Protocol.GetView:input_type -> dr.protocol.IDRequest
+	15, // 14: dr.protocol.Apr.GetApr:input_type -> dr.protocol.AprRequest
+	2,  // 15: dr.protocol.Basic.SoftwareInfo:output_type -> dr.protocol.SoftwareInfoReply
+	5,  // 16: dr.protocol.Protocol.GetPatientTypeList:output_type -> dr.protocol.PatientTypeReply
+	8,  // 17: dr.protocol.Protocol.GetBodyPartList:output_type -> dr.protocol.BodyPartReply
+	11, // 18: dr.protocol.Protocol.GetProcedureList:output_type -> dr.protocol.ProcedureReply
+	10, // 19: dr.protocol.Protocol.GetProcedure:output_type -> dr.protocol.Procedure
+	14, // 20: dr.protocol.Protocol.GetViewList:output_type -> dr.protocol.ViewReply
+	13, // 21: dr.protocol.Protocol.GetView:output_type -> dr.protocol.View
+	17, // 22: dr.protocol.Apr.GetApr:output_type -> dr.protocol.AprReply
+	15, // [15:23] is the sub-list for method output_type
+	7,  // [7:15] is the sub-list for method input_type
+	7,  // [7:7] is the sub-list for extension type_name
+	7,  // [7:7] is the sub-list for extension extendee
+	0,  // [0:7] is the sub-list for field type_name
 }
 
 func init() { file_dr_protocol_idl_proto_init() }
@@ -1903,18 +1795,18 @@ func file_dr_protocol_idl_proto_init() {
 		return
 	}
 	file_dr_protocol_idl_proto_msgTypes[1].OneofWrappers = []any{}
-	file_dr_protocol_idl_proto_msgTypes[5].OneofWrappers = []any{}
-	file_dr_protocol_idl_proto_msgTypes[8].OneofWrappers = []any{}
-	file_dr_protocol_idl_proto_msgTypes[11].OneofWrappers = []any{}
-	file_dr_protocol_idl_proto_msgTypes[14].OneofWrappers = []any{}
-	file_dr_protocol_idl_proto_msgTypes[17].OneofWrappers = []any{}
+	file_dr_protocol_idl_proto_msgTypes[3].OneofWrappers = []any{}
+	file_dr_protocol_idl_proto_msgTypes[6].OneofWrappers = []any{}
+	file_dr_protocol_idl_proto_msgTypes[9].OneofWrappers = []any{}
+	file_dr_protocol_idl_proto_msgTypes[12].OneofWrappers = []any{}
+	file_dr_protocol_idl_proto_msgTypes[15].OneofWrappers = []any{}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: unsafe.Slice(unsafe.StringData(file_dr_protocol_idl_proto_rawDesc), len(file_dr_protocol_idl_proto_rawDesc)),
 			NumEnums:      0,
-			NumMessages:   20,
+			NumMessages:   18,
 			NumExtensions: 0,
 			NumServices:   3,
 		},

+ 0 - 38
dr_protocol_pb/dr_protocol_idl_grpc.pb.go

@@ -20,7 +20,6 @@ const _ = grpc.SupportPackageIsVersion9
 
 const (
 	Basic_SoftwareInfo_FullMethodName = "/dr.protocol.Basic/SoftwareInfo"
-	Basic_GetOptions_FullMethodName   = "/dr.protocol.Basic/GetOptions"
 )
 
 // BasicClient is the client API for Basic service.
@@ -28,7 +27,6 @@ const (
 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
 type BasicClient interface {
 	SoftwareInfo(ctx context.Context, in *EmptyRequest, opts ...grpc.CallOption) (*SoftwareInfoReply, error)
-	GetOptions(ctx context.Context, in *OptionRequest, opts ...grpc.CallOption) (*OptionReply, error)
 }
 
 type basicClient struct {
@@ -49,22 +47,11 @@ func (c *basicClient) SoftwareInfo(ctx context.Context, in *EmptyRequest, opts .
 	return out, nil
 }
 
-func (c *basicClient) GetOptions(ctx context.Context, in *OptionRequest, opts ...grpc.CallOption) (*OptionReply, error) {
-	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
-	out := new(OptionReply)
-	err := c.cc.Invoke(ctx, Basic_GetOptions_FullMethodName, in, out, cOpts...)
-	if err != nil {
-		return nil, err
-	}
-	return out, nil
-}
-
 // BasicServer is the server API for Basic service.
 // All implementations must embed UnimplementedBasicServer
 // for forward compatibility.
 type BasicServer interface {
 	SoftwareInfo(context.Context, *EmptyRequest) (*SoftwareInfoReply, error)
-	GetOptions(context.Context, *OptionRequest) (*OptionReply, error)
 	mustEmbedUnimplementedBasicServer()
 }
 
@@ -78,9 +65,6 @@ type UnimplementedBasicServer struct{}
 func (UnimplementedBasicServer) SoftwareInfo(context.Context, *EmptyRequest) (*SoftwareInfoReply, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method SoftwareInfo not implemented")
 }
-func (UnimplementedBasicServer) GetOptions(context.Context, *OptionRequest) (*OptionReply, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method GetOptions not implemented")
-}
 func (UnimplementedBasicServer) mustEmbedUnimplementedBasicServer() {}
 func (UnimplementedBasicServer) testEmbeddedByValue()               {}
 
@@ -120,24 +104,6 @@ func _Basic_SoftwareInfo_Handler(srv interface{}, ctx context.Context, dec func(
 	return interceptor(ctx, in, info, handler)
 }
 
-func _Basic_GetOptions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(OptionRequest)
-	if err := dec(in); err != nil {
-		return nil, err
-	}
-	if interceptor == nil {
-		return srv.(BasicServer).GetOptions(ctx, in)
-	}
-	info := &grpc.UnaryServerInfo{
-		Server:     srv,
-		FullMethod: Basic_GetOptions_FullMethodName,
-	}
-	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(BasicServer).GetOptions(ctx, req.(*OptionRequest))
-	}
-	return interceptor(ctx, in, info, handler)
-}
-
 // Basic_ServiceDesc is the grpc.ServiceDesc for Basic service.
 // It's only intended for direct use with grpc.RegisterService,
 // and not to be introspected or modified (even as a copy)
@@ -149,10 +115,6 @@ var Basic_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "SoftwareInfo",
 			Handler:    _Basic_SoftwareInfo_Handler,
 		},
-		{
-			MethodName: "GetOptions",
-			Handler:    _Basic_GetOptions_Handler,
-		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "dr_protocol_idl.proto",

+ 12 - 0
dr_resource_idl.proto

@@ -4,6 +4,8 @@ option go_package = "dr_resource_pb/";
 
 package dr.resource;
 
+import "google/protobuf/struct.proto";
+
 message EmptyRequest {}
 
 service Basic {
@@ -18,11 +20,21 @@ message SoftwareInfoReply {
 }
 
 service Config {
+  rpc GetOptions (OptionRequest) returns (OptionReply) {}
   rpc ConfigOptionList (ConfigOptionListRequest) returns (ConfigOptionListReply) {}
   rpc ConfigList (ConfigListRequest) returns (ConfigListResponse) {}
   rpc UpdateConfigItems (ConfigItemRequest) returns (ConfigListResponse) {}
 }
 
+message OptionRequest {
+  string group = 1;
+  string flag = 2;
+}
+
+message OptionReply {
+  repeated google.protobuf.Struct option = 1;
+}
+
 message ConfigOptionListRequest {
   string flag       = 1;
   bool   is_enabled = 2;

+ 157 - 47
dr_resource_pb/dr_resource_idl.pb.go

@@ -9,6 +9,7 @@ package dr_resource_pb
 import (
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	structpb "google.golang.org/protobuf/types/known/structpb"
 	reflect "reflect"
 	sync "sync"
 	unsafe "unsafe"
@@ -125,6 +126,102 @@ func (x *SoftwareInfoReply) GetVersion() string {
 	return ""
 }
 
+type OptionRequest struct {
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	Group         string                 `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"`
+	Flag          string                 `protobuf:"bytes,2,opt,name=flag,proto3" json:"flag,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *OptionRequest) Reset() {
+	*x = OptionRequest{}
+	mi := &file_dr_resource_idl_proto_msgTypes[2]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *OptionRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*OptionRequest) ProtoMessage() {}
+
+func (x *OptionRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_dr_resource_idl_proto_msgTypes[2]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use OptionRequest.ProtoReflect.Descriptor instead.
+func (*OptionRequest) Descriptor() ([]byte, []int) {
+	return file_dr_resource_idl_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *OptionRequest) GetGroup() string {
+	if x != nil {
+		return x.Group
+	}
+	return ""
+}
+
+func (x *OptionRequest) GetFlag() string {
+	if x != nil {
+		return x.Flag
+	}
+	return ""
+}
+
+type OptionReply struct {
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	Option        []*structpb.Struct     `protobuf:"bytes,1,rep,name=option,proto3" json:"option,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *OptionReply) Reset() {
+	*x = OptionReply{}
+	mi := &file_dr_resource_idl_proto_msgTypes[3]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *OptionReply) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*OptionReply) ProtoMessage() {}
+
+func (x *OptionReply) ProtoReflect() protoreflect.Message {
+	mi := &file_dr_resource_idl_proto_msgTypes[3]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use OptionReply.ProtoReflect.Descriptor instead.
+func (*OptionReply) Descriptor() ([]byte, []int) {
+	return file_dr_resource_idl_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *OptionReply) GetOption() []*structpb.Struct {
+	if x != nil {
+		return x.Option
+	}
+	return nil
+}
+
 type ConfigOptionListRequest struct {
 	state         protoimpl.MessageState `protogen:"open.v1"`
 	Flag          string                 `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"`
@@ -135,7 +232,7 @@ type ConfigOptionListRequest struct {
 
 func (x *ConfigOptionListRequest) Reset() {
 	*x = ConfigOptionListRequest{}
-	mi := &file_dr_resource_idl_proto_msgTypes[2]
+	mi := &file_dr_resource_idl_proto_msgTypes[4]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -147,7 +244,7 @@ func (x *ConfigOptionListRequest) String() string {
 func (*ConfigOptionListRequest) ProtoMessage() {}
 
 func (x *ConfigOptionListRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_resource_idl_proto_msgTypes[2]
+	mi := &file_dr_resource_idl_proto_msgTypes[4]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -160,7 +257,7 @@ func (x *ConfigOptionListRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ConfigOptionListRequest.ProtoReflect.Descriptor instead.
 func (*ConfigOptionListRequest) Descriptor() ([]byte, []int) {
-	return file_dr_resource_idl_proto_rawDescGZIP(), []int{2}
+	return file_dr_resource_idl_proto_rawDescGZIP(), []int{4}
 }
 
 func (x *ConfigOptionListRequest) GetFlag() string {
@@ -190,7 +287,7 @@ type ConfigOption struct {
 
 func (x *ConfigOption) Reset() {
 	*x = ConfigOption{}
-	mi := &file_dr_resource_idl_proto_msgTypes[3]
+	mi := &file_dr_resource_idl_proto_msgTypes[5]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -202,7 +299,7 @@ func (x *ConfigOption) String() string {
 func (*ConfigOption) ProtoMessage() {}
 
 func (x *ConfigOption) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_resource_idl_proto_msgTypes[3]
+	mi := &file_dr_resource_idl_proto_msgTypes[5]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -215,7 +312,7 @@ func (x *ConfigOption) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ConfigOption.ProtoReflect.Descriptor instead.
 func (*ConfigOption) Descriptor() ([]byte, []int) {
-	return file_dr_resource_idl_proto_rawDescGZIP(), []int{3}
+	return file_dr_resource_idl_proto_rawDescGZIP(), []int{5}
 }
 
 func (x *ConfigOption) GetFlag() string {
@@ -262,7 +359,7 @@ type ConfigOptionListReply struct {
 
 func (x *ConfigOptionListReply) Reset() {
 	*x = ConfigOptionListReply{}
-	mi := &file_dr_resource_idl_proto_msgTypes[4]
+	mi := &file_dr_resource_idl_proto_msgTypes[6]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -274,7 +371,7 @@ func (x *ConfigOptionListReply) String() string {
 func (*ConfigOptionListReply) ProtoMessage() {}
 
 func (x *ConfigOptionListReply) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_resource_idl_proto_msgTypes[4]
+	mi := &file_dr_resource_idl_proto_msgTypes[6]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -287,7 +384,7 @@ func (x *ConfigOptionListReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ConfigOptionListReply.ProtoReflect.Descriptor instead.
 func (*ConfigOptionListReply) Descriptor() ([]byte, []int) {
-	return file_dr_resource_idl_proto_rawDescGZIP(), []int{4}
+	return file_dr_resource_idl_proto_rawDescGZIP(), []int{6}
 }
 
 func (x *ConfigOptionListReply) GetConfigOption() []*ConfigOption {
@@ -310,7 +407,7 @@ type ConfigListRequest struct {
 
 func (x *ConfigListRequest) Reset() {
 	*x = ConfigListRequest{}
-	mi := &file_dr_resource_idl_proto_msgTypes[5]
+	mi := &file_dr_resource_idl_proto_msgTypes[7]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -322,7 +419,7 @@ func (x *ConfigListRequest) String() string {
 func (*ConfigListRequest) ProtoMessage() {}
 
 func (x *ConfigListRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_resource_idl_proto_msgTypes[5]
+	mi := &file_dr_resource_idl_proto_msgTypes[7]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -335,7 +432,7 @@ func (x *ConfigListRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ConfigListRequest.ProtoReflect.Descriptor instead.
 func (*ConfigListRequest) Descriptor() ([]byte, []int) {
-	return file_dr_resource_idl_proto_rawDescGZIP(), []int{5}
+	return file_dr_resource_idl_proto_rawDescGZIP(), []int{7}
 }
 
 func (x *ConfigListRequest) GetFilter() isConfigListRequest_Filter {
@@ -395,7 +492,7 @@ type ConfigListResponse struct {
 
 func (x *ConfigListResponse) Reset() {
 	*x = ConfigListResponse{}
-	mi := &file_dr_resource_idl_proto_msgTypes[6]
+	mi := &file_dr_resource_idl_proto_msgTypes[8]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -407,7 +504,7 @@ func (x *ConfigListResponse) String() string {
 func (*ConfigListResponse) ProtoMessage() {}
 
 func (x *ConfigListResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_resource_idl_proto_msgTypes[6]
+	mi := &file_dr_resource_idl_proto_msgTypes[8]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -420,7 +517,7 @@ func (x *ConfigListResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ConfigListResponse.ProtoReflect.Descriptor instead.
 func (*ConfigListResponse) Descriptor() ([]byte, []int) {
-	return file_dr_resource_idl_proto_rawDescGZIP(), []int{6}
+	return file_dr_resource_idl_proto_rawDescGZIP(), []int{8}
 }
 
 func (x *ConfigListResponse) GetKey() string {
@@ -488,7 +585,7 @@ type ConfigItemRequest struct {
 
 func (x *ConfigItemRequest) Reset() {
 	*x = ConfigItemRequest{}
-	mi := &file_dr_resource_idl_proto_msgTypes[7]
+	mi := &file_dr_resource_idl_proto_msgTypes[9]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -500,7 +597,7 @@ func (x *ConfigItemRequest) String() string {
 func (*ConfigItemRequest) ProtoMessage() {}
 
 func (x *ConfigItemRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_dr_resource_idl_proto_msgTypes[7]
+	mi := &file_dr_resource_idl_proto_msgTypes[9]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -513,7 +610,7 @@ func (x *ConfigItemRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ConfigItemRequest.ProtoReflect.Descriptor instead.
 func (*ConfigItemRequest) Descriptor() ([]byte, []int) {
-	return file_dr_resource_idl_proto_rawDescGZIP(), []int{7}
+	return file_dr_resource_idl_proto_rawDescGZIP(), []int{9}
 }
 
 func (x *ConfigItemRequest) GetItems() map[string]string {
@@ -527,13 +624,18 @@ var File_dr_resource_idl_proto protoreflect.FileDescriptor
 
 const file_dr_resource_idl_proto_rawDesc = "" +
 	"\n" +
-	"\x15dr_resource_idl.proto\x12\vdr.resource\"\x0e\n" +
+	"\x15dr_resource_idl.proto\x12\vdr.resource\x1a\x1cgoogle/protobuf/struct.proto\"\x0e\n" +
 	"\fEmptyRequest\"o\n" +
 	"\x11SoftwareInfoReply\x12\x16\n" +
 	"\x06module\x18\x01 \x01(\tR\x06module\x12\x12\n" +
 	"\x04desc\x18\x02 \x01(\tR\x04desc\x12\x14\n" +
 	"\x05build\x18\x03 \x01(\tR\x05build\x12\x18\n" +
-	"\aversion\x18\x04 \x01(\tR\aversion\"L\n" +
+	"\aversion\x18\x04 \x01(\tR\aversion\"9\n" +
+	"\rOptionRequest\x12\x14\n" +
+	"\x05group\x18\x01 \x01(\tR\x05group\x12\x12\n" +
+	"\x04flag\x18\x02 \x01(\tR\x04flag\">\n" +
+	"\vOptionReply\x12/\n" +
+	"\x06option\x18\x01 \x03(\v2\x17.google.protobuf.StructR\x06option\"L\n" +
 	"\x17ConfigOptionListRequest\x12\x12\n" +
 	"\x04flag\x18\x01 \x01(\tR\x04flag\x12\x1d\n" +
 	"\n" +
@@ -570,8 +672,10 @@ const file_dr_resource_idl_proto_rawDesc = "" +
 	"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
 	"\x05value\x18\x02 \x01(\tR\x05value:\x028\x012T\n" +
 	"\x05Basic\x12K\n" +
-	"\fSoftwareInfo\x12\x19.dr.resource.EmptyRequest\x1a\x1e.dr.resource.SoftwareInfoReply\"\x002\x91\x02\n" +
-	"\x06Config\x12^\n" +
+	"\fSoftwareInfo\x12\x19.dr.resource.EmptyRequest\x1a\x1e.dr.resource.SoftwareInfoReply\"\x002\xd7\x02\n" +
+	"\x06Config\x12D\n" +
+	"\n" +
+	"GetOptions\x12\x1a.dr.resource.OptionRequest\x1a\x18.dr.resource.OptionReply\"\x00\x12^\n" +
 	"\x10ConfigOptionList\x12$.dr.resource.ConfigOptionListRequest\x1a\".dr.resource.ConfigOptionListReply\"\x00\x12O\n" +
 	"\n" +
 	"ConfigList\x12\x1e.dr.resource.ConfigListRequest\x1a\x1f.dr.resource.ConfigListResponse\"\x00\x12V\n" +
@@ -589,34 +693,40 @@ func file_dr_resource_idl_proto_rawDescGZIP() []byte {
 	return file_dr_resource_idl_proto_rawDescData
 }
 
-var file_dr_resource_idl_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
+var file_dr_resource_idl_proto_msgTypes = make([]protoimpl.MessageInfo, 11)
 var file_dr_resource_idl_proto_goTypes = []any{
 	(*EmptyRequest)(nil),            // 0: dr.resource.EmptyRequest
 	(*SoftwareInfoReply)(nil),       // 1: dr.resource.SoftwareInfoReply
-	(*ConfigOptionListRequest)(nil), // 2: dr.resource.ConfigOptionListRequest
-	(*ConfigOption)(nil),            // 3: dr.resource.ConfigOption
-	(*ConfigOptionListReply)(nil),   // 4: dr.resource.ConfigOptionListReply
-	(*ConfigListRequest)(nil),       // 5: dr.resource.ConfigListRequest
-	(*ConfigListResponse)(nil),      // 6: dr.resource.ConfigListResponse
-	(*ConfigItemRequest)(nil),       // 7: dr.resource.ConfigItemRequest
-	nil,                             // 8: dr.resource.ConfigItemRequest.ItemsEntry
+	(*OptionRequest)(nil),           // 2: dr.resource.OptionRequest
+	(*OptionReply)(nil),             // 3: dr.resource.OptionReply
+	(*ConfigOptionListRequest)(nil), // 4: dr.resource.ConfigOptionListRequest
+	(*ConfigOption)(nil),            // 5: dr.resource.ConfigOption
+	(*ConfigOptionListReply)(nil),   // 6: dr.resource.ConfigOptionListReply
+	(*ConfigListRequest)(nil),       // 7: dr.resource.ConfigListRequest
+	(*ConfigListResponse)(nil),      // 8: dr.resource.ConfigListResponse
+	(*ConfigItemRequest)(nil),       // 9: dr.resource.ConfigItemRequest
+	nil,                             // 10: dr.resource.ConfigItemRequest.ItemsEntry
+	(*structpb.Struct)(nil),         // 11: google.protobuf.Struct
 }
 var file_dr_resource_idl_proto_depIdxs = []int32{
-	3, // 0: dr.resource.ConfigOptionListReply.configOption:type_name -> dr.resource.ConfigOption
-	8, // 1: dr.resource.ConfigItemRequest.items:type_name -> dr.resource.ConfigItemRequest.ItemsEntry
-	0, // 2: dr.resource.Basic.SoftwareInfo:input_type -> dr.resource.EmptyRequest
-	2, // 3: dr.resource.Config.ConfigOptionList:input_type -> dr.resource.ConfigOptionListRequest
-	5, // 4: dr.resource.Config.ConfigList:input_type -> dr.resource.ConfigListRequest
-	7, // 5: dr.resource.Config.UpdateConfigItems:input_type -> dr.resource.ConfigItemRequest
-	1, // 6: dr.resource.Basic.SoftwareInfo:output_type -> dr.resource.SoftwareInfoReply
-	4, // 7: dr.resource.Config.ConfigOptionList:output_type -> dr.resource.ConfigOptionListReply
-	6, // 8: dr.resource.Config.ConfigList:output_type -> dr.resource.ConfigListResponse
-	6, // 9: dr.resource.Config.UpdateConfigItems:output_type -> dr.resource.ConfigListResponse
-	6, // [6:10] is the sub-list for method output_type
-	2, // [2:6] is the sub-list for method input_type
-	2, // [2:2] is the sub-list for extension type_name
-	2, // [2:2] is the sub-list for extension extendee
-	0, // [0:2] is the sub-list for field type_name
+	11, // 0: dr.resource.OptionReply.option:type_name -> google.protobuf.Struct
+	5,  // 1: dr.resource.ConfigOptionListReply.configOption:type_name -> dr.resource.ConfigOption
+	10, // 2: dr.resource.ConfigItemRequest.items:type_name -> dr.resource.ConfigItemRequest.ItemsEntry
+	0,  // 3: dr.resource.Basic.SoftwareInfo:input_type -> dr.resource.EmptyRequest
+	2,  // 4: dr.resource.Config.GetOptions:input_type -> dr.resource.OptionRequest
+	4,  // 5: dr.resource.Config.ConfigOptionList:input_type -> dr.resource.ConfigOptionListRequest
+	7,  // 6: dr.resource.Config.ConfigList:input_type -> dr.resource.ConfigListRequest
+	9,  // 7: dr.resource.Config.UpdateConfigItems:input_type -> dr.resource.ConfigItemRequest
+	1,  // 8: dr.resource.Basic.SoftwareInfo:output_type -> dr.resource.SoftwareInfoReply
+	3,  // 9: dr.resource.Config.GetOptions:output_type -> dr.resource.OptionReply
+	6,  // 10: dr.resource.Config.ConfigOptionList:output_type -> dr.resource.ConfigOptionListReply
+	8,  // 11: dr.resource.Config.ConfigList:output_type -> dr.resource.ConfigListResponse
+	8,  // 12: dr.resource.Config.UpdateConfigItems:output_type -> dr.resource.ConfigListResponse
+	8,  // [8:13] is the sub-list for method output_type
+	3,  // [3:8] is the sub-list for method input_type
+	3,  // [3:3] is the sub-list for extension type_name
+	3,  // [3:3] is the sub-list for extension extendee
+	0,  // [0:3] is the sub-list for field type_name
 }
 
 func init() { file_dr_resource_idl_proto_init() }
@@ -624,7 +734,7 @@ func file_dr_resource_idl_proto_init() {
 	if File_dr_resource_idl_proto != nil {
 		return
 	}
-	file_dr_resource_idl_proto_msgTypes[5].OneofWrappers = []any{
+	file_dr_resource_idl_proto_msgTypes[7].OneofWrappers = []any{
 		(*ConfigListRequest_Group)(nil),
 		(*ConfigListRequest_Key)(nil),
 	}
@@ -634,7 +744,7 @@ func file_dr_resource_idl_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: unsafe.Slice(unsafe.StringData(file_dr_resource_idl_proto_rawDesc), len(file_dr_resource_idl_proto_rawDesc)),
 			NumEnums:      0,
-			NumMessages:   9,
+			NumMessages:   11,
 			NumExtensions: 0,
 			NumServices:   2,
 		},

+ 38 - 0
dr_resource_pb/dr_resource_idl_grpc.pb.go

@@ -121,6 +121,7 @@ var Basic_ServiceDesc = grpc.ServiceDesc{
 }
 
 const (
+	Config_GetOptions_FullMethodName        = "/dr.resource.Config/GetOptions"
 	Config_ConfigOptionList_FullMethodName  = "/dr.resource.Config/ConfigOptionList"
 	Config_ConfigList_FullMethodName        = "/dr.resource.Config/ConfigList"
 	Config_UpdateConfigItems_FullMethodName = "/dr.resource.Config/UpdateConfigItems"
@@ -130,6 +131,7 @@ const (
 //
 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
 type ConfigClient interface {
+	GetOptions(ctx context.Context, in *OptionRequest, opts ...grpc.CallOption) (*OptionReply, error)
 	ConfigOptionList(ctx context.Context, in *ConfigOptionListRequest, opts ...grpc.CallOption) (*ConfigOptionListReply, error)
 	ConfigList(ctx context.Context, in *ConfigListRequest, opts ...grpc.CallOption) (*ConfigListResponse, error)
 	UpdateConfigItems(ctx context.Context, in *ConfigItemRequest, opts ...grpc.CallOption) (*ConfigListResponse, error)
@@ -143,6 +145,16 @@ func NewConfigClient(cc grpc.ClientConnInterface) ConfigClient {
 	return &configClient{cc}
 }
 
+func (c *configClient) GetOptions(ctx context.Context, in *OptionRequest, opts ...grpc.CallOption) (*OptionReply, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+	out := new(OptionReply)
+	err := c.cc.Invoke(ctx, Config_GetOptions_FullMethodName, in, out, cOpts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *configClient) ConfigOptionList(ctx context.Context, in *ConfigOptionListRequest, opts ...grpc.CallOption) (*ConfigOptionListReply, error) {
 	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
 	out := new(ConfigOptionListReply)
@@ -177,6 +189,7 @@ func (c *configClient) UpdateConfigItems(ctx context.Context, in *ConfigItemRequ
 // All implementations must embed UnimplementedConfigServer
 // for forward compatibility.
 type ConfigServer interface {
+	GetOptions(context.Context, *OptionRequest) (*OptionReply, error)
 	ConfigOptionList(context.Context, *ConfigOptionListRequest) (*ConfigOptionListReply, error)
 	ConfigList(context.Context, *ConfigListRequest) (*ConfigListResponse, error)
 	UpdateConfigItems(context.Context, *ConfigItemRequest) (*ConfigListResponse, error)
@@ -190,6 +203,9 @@ type ConfigServer interface {
 // pointer dereference when methods are called.
 type UnimplementedConfigServer struct{}
 
+func (UnimplementedConfigServer) GetOptions(context.Context, *OptionRequest) (*OptionReply, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetOptions not implemented")
+}
 func (UnimplementedConfigServer) ConfigOptionList(context.Context, *ConfigOptionListRequest) (*ConfigOptionListReply, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method ConfigOptionList not implemented")
 }
@@ -220,6 +236,24 @@ func RegisterConfigServer(s grpc.ServiceRegistrar, srv ConfigServer) {
 	s.RegisterService(&Config_ServiceDesc, srv)
 }
 
+func _Config_GetOptions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(OptionRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ConfigServer).GetOptions(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Config_GetOptions_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ConfigServer).GetOptions(ctx, req.(*OptionRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _Config_ConfigOptionList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(ConfigOptionListRequest)
 	if err := dec(in); err != nil {
@@ -281,6 +315,10 @@ var Config_ServiceDesc = grpc.ServiceDesc{
 	ServiceName: "dr.resource.Config",
 	HandlerType: (*ConfigServer)(nil),
 	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetOptions",
+			Handler:    _Config_GetOptions_Handler,
+		},
 		{
 			MethodName: "ConfigOptionList",
 			Handler:    _Config_ConfigOptionList_Handler,