github.com/yimialmonte/fabric@v2.1.1+incompatible/common/tools/protolator/protoext/peerext/configuration.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package peerext 8 9 import ( 10 "fmt" 11 12 "github.com/golang/protobuf/proto" 13 "github.com/hyperledger/fabric-protos-go/common" 14 "github.com/hyperledger/fabric-protos-go/msp" 15 "github.com/hyperledger/fabric-protos-go/peer" 16 ) 17 18 type DynamicApplicationGroup struct { 19 *common.ConfigGroup 20 } 21 22 func (dag *DynamicApplicationGroup) Underlying() proto.Message { 23 return dag.ConfigGroup 24 } 25 26 func (dag *DynamicApplicationGroup) DynamicMapFields() []string { 27 return []string{"groups", "values"} 28 } 29 30 func (dag *DynamicApplicationGroup) DynamicMapFieldProto(name string, key string, base proto.Message) (proto.Message, error) { 31 switch name { 32 case "groups": 33 cg, ok := base.(*common.ConfigGroup) 34 if !ok { 35 return nil, fmt.Errorf("ConfigGroup groups can only contain ConfigGroup messages") 36 } 37 38 return &DynamicApplicationOrgGroup{ 39 ConfigGroup: cg, 40 }, nil 41 case "values": 42 cv, ok := base.(*common.ConfigValue) 43 if !ok { 44 return nil, fmt.Errorf("ConfigGroup values can only contain ConfigValue messages") 45 } 46 return &DynamicApplicationConfigValue{ 47 ConfigValue: cv, 48 name: key, 49 }, nil 50 default: 51 return nil, fmt.Errorf("ConfigGroup does not have a dynamic field: %s", name) 52 } 53 } 54 55 type DynamicApplicationOrgGroup struct { 56 *common.ConfigGroup 57 } 58 59 func (dag *DynamicApplicationOrgGroup) Underlying() proto.Message { 60 return dag.ConfigGroup 61 } 62 63 func (dag *DynamicApplicationOrgGroup) DynamicMapFields() []string { 64 return []string{"groups", "values"} 65 } 66 67 func (dag *DynamicApplicationOrgGroup) DynamicMapFieldProto(name string, key string, base proto.Message) (proto.Message, error) { 68 switch name { 69 case "groups": 70 return nil, fmt.Errorf("The application orgs do not support sub-groups") 71 case "values": 72 cv, ok := base.(*common.ConfigValue) 73 if !ok { 74 return nil, fmt.Errorf("ConfigGroup values can only contain ConfigValue messages") 75 } 76 77 return &DynamicApplicationOrgConfigValue{ 78 ConfigValue: cv, 79 name: key, 80 }, nil 81 default: 82 return nil, fmt.Errorf("Not a dynamic application map field: %s", name) 83 } 84 } 85 86 type DynamicApplicationConfigValue struct { 87 *common.ConfigValue 88 name string 89 } 90 91 func (ccv *DynamicApplicationConfigValue) Underlying() proto.Message { 92 return ccv.ConfigValue 93 } 94 95 func (ccv *DynamicApplicationConfigValue) StaticallyOpaqueFields() []string { 96 return []string{"value"} 97 } 98 99 func (ccv *DynamicApplicationConfigValue) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { 100 if name != "value" { 101 return nil, fmt.Errorf("Not a marshaled field: %s", name) 102 } 103 switch ccv.name { 104 case "Capabilities": 105 return &common.Capabilities{}, nil 106 case "ACLs": 107 return &peer.ACLs{}, nil 108 default: 109 return nil, fmt.Errorf("Unknown Application ConfigValue name: %s", ccv.name) 110 } 111 } 112 113 type DynamicApplicationOrgConfigValue struct { 114 *common.ConfigValue 115 name string 116 } 117 118 func (daocv *DynamicApplicationOrgConfigValue) Underlying() proto.Message { 119 return daocv.ConfigValue 120 } 121 122 func (daocv *DynamicApplicationOrgConfigValue) StaticallyOpaqueFields() []string { 123 return []string{"value"} 124 } 125 126 func (daocv *DynamicApplicationOrgConfigValue) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { 127 if name != "value" { 128 return nil, fmt.Errorf("Not a marshaled field: %s", name) 129 } 130 switch daocv.name { 131 case "MSP": 132 return &msp.MSPConfig{}, nil 133 case "AnchorPeers": 134 return &peer.AnchorPeers{}, nil 135 default: 136 return nil, fmt.Errorf("Unknown Application Org ConfigValue name: %s", daocv.name) 137 } 138 }