github.com/netdata/go.d.plugin@v0.58.1/pkg/matcher/string.go (about)

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package matcher
     4  
     5  import (
     6  	"bytes"
     7  	"strings"
     8  )
     9  
    10  type (
    11  	// stringFullMatcher implements Matcher, it uses "==" to match.
    12  	stringFullMatcher string
    13  
    14  	// stringPartialMatcher implements Matcher, it uses strings.Contains to match.
    15  	stringPartialMatcher string
    16  
    17  	// stringPrefixMatcher implements Matcher, it uses strings.HasPrefix to match.
    18  	stringPrefixMatcher string
    19  
    20  	// stringSuffixMatcher implements Matcher, it uses strings.HasSuffix to match.
    21  	stringSuffixMatcher string
    22  )
    23  
    24  // NewStringMatcher create a new matcher with string format
    25  func NewStringMatcher(s string, startWith, endWith bool) (Matcher, error) {
    26  	switch {
    27  	case startWith && endWith:
    28  		return stringFullMatcher(s), nil
    29  	case startWith && !endWith:
    30  		return stringPrefixMatcher(s), nil
    31  	case !startWith && endWith:
    32  		return stringSuffixMatcher(s), nil
    33  	default:
    34  		return stringPartialMatcher(s), nil
    35  	}
    36  }
    37  
    38  func (m stringFullMatcher) Match(b []byte) bool          { return string(m) == string(b) }
    39  func (m stringFullMatcher) MatchString(line string) bool { return string(m) == line }
    40  
    41  func (m stringPartialMatcher) Match(b []byte) bool          { return bytes.Contains(b, []byte(m)) }
    42  func (m stringPartialMatcher) MatchString(line string) bool { return strings.Contains(line, string(m)) }
    43  
    44  func (m stringPrefixMatcher) Match(b []byte) bool          { return bytes.HasPrefix(b, []byte(m)) }
    45  func (m stringPrefixMatcher) MatchString(line string) bool { return strings.HasPrefix(line, string(m)) }
    46  
    47  func (m stringSuffixMatcher) Match(b []byte) bool          { return bytes.HasSuffix(b, []byte(m)) }
    48  func (m stringSuffixMatcher) MatchString(line string) bool { return strings.HasSuffix(line, string(m)) }