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  }