github.com/kaituanwang/hyperledger@v2.0.1+incompatible/common/tools/protolator/protoext/ordererext/configuration.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package ordererext 8 9 import ( 10 "fmt" 11 12 "github.com/golang/protobuf/proto" 13 "github.com/golang/protobuf/ptypes/empty" 14 "github.com/hyperledger/fabric-protos-go/common" 15 "github.com/hyperledger/fabric-protos-go/msp" 16 "github.com/hyperledger/fabric-protos-go/orderer" 17 "github.com/hyperledger/fabric-protos-go/orderer/etcdraft" 18 ) 19 20 type DynamicOrdererGroup struct { 21 *common.ConfigGroup 22 } 23 24 func (dcg *DynamicOrdererGroup) Underlying() proto.Message { 25 return dcg.ConfigGroup 26 } 27 28 func (dcg *DynamicOrdererGroup) DynamicMapFields() []string { 29 return []string{"values", "groups"} 30 } 31 32 func (dcg *DynamicOrdererGroup) DynamicMapFieldProto(name string, key string, base proto.Message) (proto.Message, error) { 33 switch name { 34 case "groups": 35 cg, ok := base.(*common.ConfigGroup) 36 if !ok { 37 return nil, fmt.Errorf("ConfigGroup groups can only contain ConfigGroup messages") 38 } 39 40 return &DynamicOrdererOrgGroup{ 41 ConfigGroup: cg, 42 }, nil 43 case "values": 44 cv, ok := base.(*common.ConfigValue) 45 if !ok { 46 return nil, fmt.Errorf("ConfigGroup values can only contain ConfigValue messages") 47 } 48 return &DynamicOrdererConfigValue{ 49 ConfigValue: cv, 50 name: key, 51 }, nil 52 default: 53 return nil, fmt.Errorf("ConfigGroup does not have a dynamic field: %s", name) 54 } 55 } 56 57 type ConsensusTypeMetadataFactory interface { 58 NewMessage() proto.Message 59 } 60 61 // ConsensuTypeMetadataMap should have consensus implementations register their metadata message factories 62 var ConsensusTypeMetadataMap = map[string]ConsensusTypeMetadataFactory{} 63 64 type ConsensusType struct { 65 *orderer.ConsensusType 66 } 67 68 func (ct *ConsensusType) Underlying() proto.Message { 69 return ct.ConsensusType 70 } 71 72 func (ct *ConsensusType) VariablyOpaqueFields() []string { 73 return []string{"metadata"} 74 } 75 76 func (ct *ConsensusType) VariablyOpaqueFieldProto(name string) (proto.Message, error) { 77 if name != "metadata" { 78 return nil, fmt.Errorf("not a valid opaque field: %s", name) 79 } 80 switch ct.Type { 81 case "etcdraft": 82 return &etcdraft.ConfigMetadata{}, nil 83 default: 84 return &empty.Empty{}, nil 85 } 86 } 87 88 type DynamicOrdererOrgGroup struct { 89 *common.ConfigGroup 90 } 91 92 func (dcg *DynamicOrdererOrgGroup) Underlying() proto.Message { 93 return dcg.ConfigGroup 94 } 95 96 func (dcg *DynamicOrdererOrgGroup) DynamicMapFields() []string { 97 return []string{"groups", "values"} 98 } 99 100 func (dcg *DynamicOrdererOrgGroup) DynamicMapFieldProto(name string, key string, base proto.Message) (proto.Message, error) { 101 switch name { 102 case "groups": 103 return nil, fmt.Errorf("the orderer orgs do not support sub-groups") 104 case "values": 105 cv, ok := base.(*common.ConfigValue) 106 if !ok { 107 return nil, fmt.Errorf("ConfigGroup values can only contain ConfigValue messages") 108 } 109 110 return &DynamicOrdererOrgConfigValue{ 111 ConfigValue: cv, 112 name: key, 113 }, nil 114 default: 115 return nil, fmt.Errorf("not a dynamic orderer map field: %s", name) 116 } 117 } 118 119 type DynamicOrdererConfigValue struct { 120 *common.ConfigValue 121 name string 122 } 123 124 func (docv *DynamicOrdererConfigValue) Underlying() proto.Message { 125 return docv.ConfigValue 126 } 127 128 func (docv *DynamicOrdererConfigValue) StaticallyOpaqueFields() []string { 129 return []string{"value"} 130 } 131 132 func (docv *DynamicOrdererConfigValue) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { 133 if name != "value" { 134 return nil, fmt.Errorf("not a marshaled field: %s", name) 135 } 136 switch docv.name { 137 case "ConsensusType": 138 return &orderer.ConsensusType{}, nil 139 case "BatchSize": 140 return &orderer.BatchSize{}, nil 141 case "BatchTimeout": 142 return &orderer.BatchTimeout{}, nil 143 case "KafkaBrokers": 144 return &orderer.KafkaBrokers{}, nil 145 case "ChannelRestrictions": 146 return &orderer.ChannelRestrictions{}, nil 147 case "Capabilities": 148 return &common.Capabilities{}, nil 149 default: 150 return nil, fmt.Errorf("unknown Orderer ConfigValue name: %s", docv.name) 151 } 152 } 153 154 type DynamicOrdererOrgConfigValue struct { 155 *common.ConfigValue 156 name string 157 } 158 159 func (doocv *DynamicOrdererOrgConfigValue) Underlying() proto.Message { 160 return doocv.ConfigValue 161 } 162 func (doocv *DynamicOrdererOrgConfigValue) StaticallyOpaqueFields() []string { 163 return []string{"value"} 164 } 165 166 func (doocv *DynamicOrdererOrgConfigValue) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { 167 if name != "value" { 168 return nil, fmt.Errorf("not a marshaled field: %s", name) 169 } 170 switch doocv.name { 171 case "MSP": 172 return &msp.MSPConfig{}, nil 173 case "Endpoints": 174 return &common.OrdererAddresses{}, nil 175 default: 176 return nil, fmt.Errorf("unknown Orderer Org ConfigValue name: %s", doocv.name) 177 } 178 }