regexp.go 761 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package config
  2. import (
  3. "regexp"
  4. "gopkg.in/yaml.v3"
  5. )
  6. type Regexp struct {
  7. *regexp.Regexp
  8. }
  9. func (r *Regexp) Valid() bool {
  10. return r.Regexp != nil
  11. }
  12. func (r Regexp) String() string {
  13. if !r.Valid() {
  14. return ""
  15. }
  16. return r.Regexp.String()
  17. }
  18. func (r *Regexp) UnmarshalYAML(node *yaml.Node) error {
  19. r.Regexp = regexp.MustCompile(node.Value)
  20. return nil
  21. }
  22. func (r Regexp) MarshalYAML() (interface{}, error) {
  23. return r.String(), nil
  24. }
  25. func (r Regexp) MarshalJSON() ([]byte, error) {
  26. return []byte(`"` + r.String() + `"`), nil
  27. }
  28. func (r *Regexp) UnmarshalJSON(b []byte) error {
  29. if len(b) == 0 {
  30. return nil
  31. }
  32. if b[0] == '"' {
  33. b = b[1:]
  34. }
  35. if b[len(b)-1] == '"' {
  36. b = b[:len(b)-1]
  37. }
  38. r.Regexp = regexp.MustCompile(string(b))
  39. return nil
  40. }