storj.io/minio@v0.0.0-20230509071714-0cbc90f649b1/pkg/event/rulesmap.go (about) 1 /* 2 * MinIO Cloud Storage, (C) 2018 MinIO, Inc. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package event 18 19 // RulesMap - map of rules for every event name. 20 type RulesMap map[Name]Rules 21 22 // add - adds event names, prefixes, suffixes and target ID to rules map. 23 func (rulesMap RulesMap) add(eventNames []Name, pattern string, targetID TargetID) { 24 rules := make(Rules) 25 rules.Add(pattern, targetID) 26 27 for _, eventName := range eventNames { 28 for _, name := range eventName.Expand() { 29 rulesMap[name] = rulesMap[name].Union(rules) 30 } 31 } 32 } 33 34 // Clone - returns copy of this rules map. 35 func (rulesMap RulesMap) Clone() RulesMap { 36 rulesMapCopy := make(RulesMap) 37 38 for eventName, rules := range rulesMap { 39 rulesMapCopy[eventName] = rules.Clone() 40 } 41 42 return rulesMapCopy 43 } 44 45 // Add - adds given rules map. 46 func (rulesMap RulesMap) Add(rulesMap2 RulesMap) { 47 for eventName, rules := range rulesMap2 { 48 rulesMap[eventName] = rules.Union(rulesMap[eventName]) 49 } 50 } 51 52 // Remove - removes given rules map. 53 func (rulesMap RulesMap) Remove(rulesMap2 RulesMap) { 54 for eventName, rules := range rulesMap { 55 if nr := rules.Difference(rulesMap2[eventName]); len(nr) != 0 { 56 rulesMap[eventName] = nr 57 } else { 58 delete(rulesMap, eventName) 59 } 60 } 61 } 62 63 // MatchSimple - returns true if matching object name and event name in rules map. 64 func (rulesMap RulesMap) MatchSimple(eventName Name, objectName string) bool { 65 return rulesMap[eventName].MatchSimple(objectName) 66 } 67 68 // Match - returns TargetIDSet matching object name and event name in rules map. 69 func (rulesMap RulesMap) Match(eventName Name, objectName string) TargetIDSet { 70 return rulesMap[eventName].Match(objectName) 71 } 72 73 // NewRulesMap - creates new rules map with given values. 74 func NewRulesMap(eventNames []Name, pattern string, targetID TargetID) RulesMap { 75 // If pattern is empty, add '*' wildcard to match all. 76 if pattern == "" { 77 pattern = "*" 78 } 79 80 rulesMap := make(RulesMap) 81 rulesMap.add(eventNames, pattern, targetID) 82 return rulesMap 83 }