package shared

import "regexp"

type SerializableRegexp struct {
	regexp.Regexp
}

func CompileRegexToSerializableRegexp(expr string) (*SerializableRegexp, error) {
	re, err := regexp.Compile(expr)
	if err != nil {
		return nil, err
	}
	return &SerializableRegexp{*re}, nil
}

// UnmarshalText is by json.Unmarshal.
func (r *SerializableRegexp) UnmarshalText(text []byte) error {
	rr, err := CompileRegexToSerializableRegexp(string(text))
	if err != nil {
		return err
	}
	*r = *rr
	return nil
}

// MarshalText is used by json.Marshal.
func (r *SerializableRegexp) MarshalText() ([]byte, error) {
	return []byte(r.String()), nil
}
