package marketing import ( "errors" "github.com/descrybe/descrybe-v2/apps/api/internal/feeds" ) // clientError is a validation message safe to return to API clients. type clientError struct { msg string } func (e *clientError) Error() string { return e.msg } // ClientMsg marks a message as safe to expose in HTTP 4xx responses. func ClientMsg(msg string) error { return &clientError{msg: msg} } // ClientError reports whether err is a known client-facing marketing error. // Feed create/update validation from PrepareCampaign is also exposed. func ClientError(err error) (msg string, ok bool) { if err == nil { return "", false } var ce *clientError if errors.As(err, &ce) { return ce.msg, true } return feeds.ClientError(err) }