github.com/lzy4123/fabric@v2.1.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  }