package accessctl import ( "errors" ) // FilterNot wraps another Filter. If that filter matches, FilterNot does not // match, and vice-versa. type FilterNot struct { Filter FilterUnion `yaml:"filter"` } var _ Filter = FilterNot{} // MatchCommit implements the method for FilterInterface. func (f FilterNot) MatchCommit(req CommitRequest) error { if err := f.Filter.Filter().MatchCommit(req); errors.As(err, new(ErrFilterNoMatch)) { return nil } else if err != nil { return err } return ErrFilterNoMatch{Err: errors.New("sub-filter did match")} } // TODO FilterAll // TODO FilterAny