mirror of
				https://github.com/minio/minio.git
				synced 2025-11-04 10:11:09 +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
 | 
						|
}
 |