mirror of
				https://github.com/minio/minio.git
				synced 2025-10-31 16:21:49 +01:00 
			
		
		
		
	This is to ensure that there are no projects that try to import `minio/minio/pkg` into their own repo. Any such common packages should go to `https://github.com/minio/pkg`
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright (c) 2015-2021 MinIO, Inc.
 | |
| //
 | |
| // This file is part of MinIO Object Storage stack
 | |
| //
 | |
| // This program is free software: you can redistribute it and/or modify
 | |
| // it under the terms of the GNU Affero General Public License as published by
 | |
| // the Free Software Foundation, either version 3 of the License, or
 | |
| // (at your option) any later version.
 | |
| //
 | |
| // This program is distributed in the hope that it will be useful
 | |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| // GNU Affero General Public License for more details.
 | |
| //
 | |
| // You should have received a copy of the GNU Affero General Public License
 | |
| // along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |
| 
 | |
| package replication
 | |
| 
 | |
| import (
 | |
| 	"encoding/xml"
 | |
| )
 | |
| 
 | |
| // And - a tag to combine a prefix and multiple tags for replication configuration rule.
 | |
| type And struct {
 | |
| 	XMLName xml.Name `xml:"And" json:"And"`
 | |
| 	Prefix  string   `xml:"Prefix,omitempty" json:"Prefix,omitempty"`
 | |
| 	Tags    []Tag    `xml:"Tag,omitempty" json:"Tag,omitempty"`
 | |
| }
 | |
| 
 | |
| var errDuplicateTagKey = Errorf("Duplicate Tag Keys are not allowed")
 | |
| 
 | |
| // isEmpty returns true if Tags field is null
 | |
| func (a And) isEmpty() bool {
 | |
| 	return len(a.Tags) == 0 && a.Prefix == ""
 | |
| }
 | |
| 
 | |
| // Validate - validates the And field
 | |
| func (a And) Validate() error {
 | |
| 	if a.ContainsDuplicateTag() {
 | |
| 		return errDuplicateTagKey
 | |
| 	}
 | |
| 	for _, t := range a.Tags {
 | |
| 		if err := t.Validate(); err != nil {
 | |
| 			return err
 | |
| 		}
 | |
| 	}
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| // ContainsDuplicateTag - returns true if duplicate keys are present in And
 | |
| func (a And) ContainsDuplicateTag() bool {
 | |
| 	x := make(map[string]struct{}, len(a.Tags))
 | |
| 
 | |
| 	for _, t := range a.Tags {
 | |
| 		if _, has := x[t.Key]; has {
 | |
| 			return true
 | |
| 		}
 | |
| 		x[t.Key] = struct{}{}
 | |
| 	}
 | |
| 
 | |
| 	return false
 | |
| }
 |