mirror of
https://github.com/gotenberg/gotenberg.git
synced 2026-08-08 00:22:14 +01:00
122 lines
2.2 KiB
Go
122 lines
2.2 KiB
Go
package xassert
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/thecodingmachine/gotenberg/internal/pkg/xerror"
|
|
)
|
|
|
|
// RuleString is an interface for
|
|
// validating a string.
|
|
type RuleString interface {
|
|
with(key, value string)
|
|
validate() error
|
|
}
|
|
|
|
type baseRuleString struct {
|
|
key string
|
|
value string
|
|
}
|
|
|
|
func (r *baseRuleString) with(key, value string) {
|
|
r.key = key
|
|
r.value = value
|
|
}
|
|
|
|
type ruleStringOneOf struct {
|
|
*baseRuleString
|
|
values []string
|
|
}
|
|
|
|
func (r ruleStringOneOf) validate() error {
|
|
const op string = "xassert.ruleStringOneOf.validate"
|
|
for _, v := range r.values {
|
|
if r.value == v {
|
|
return nil
|
|
}
|
|
}
|
|
return xerror.Invalid(
|
|
op,
|
|
fmt.Sprintf("'%s' should be one of '%v', got '%s'", r.key, r.values, r.value),
|
|
nil,
|
|
)
|
|
}
|
|
|
|
/*
|
|
StringOneOf returns a RuleString for
|
|
validating that a string is one of given
|
|
values.
|
|
*/
|
|
func StringOneOf(values []string) RuleString {
|
|
return ruleStringOneOf{
|
|
&baseRuleString{},
|
|
values,
|
|
}
|
|
}
|
|
|
|
type ruleStringStartWith struct {
|
|
*baseRuleString
|
|
startWith string
|
|
}
|
|
|
|
func (r ruleStringStartWith) validate() error {
|
|
const op string = "xassert.ruleStringStartWith.validate"
|
|
if strings.HasPrefix(r.value, r.startWith) {
|
|
return nil
|
|
}
|
|
return xerror.Invalid(
|
|
op,
|
|
fmt.Sprintf("'%s' should start with '%s', got '%s'", r.key, r.startWith, r.value),
|
|
nil,
|
|
)
|
|
}
|
|
|
|
/*
|
|
StringStartWith returns a RuleString for
|
|
validating that a string starts with
|
|
given string.
|
|
*/
|
|
func StringStartWith(startWith string) RuleString {
|
|
return ruleStringStartWith{
|
|
&baseRuleString{},
|
|
startWith,
|
|
}
|
|
}
|
|
|
|
type ruleStringEndWith struct {
|
|
*baseRuleString
|
|
endWith string
|
|
}
|
|
|
|
func (r ruleStringEndWith) validate() error {
|
|
const op string = "xassert.ruleStringEndWith.validate"
|
|
if strings.HasSuffix(r.value, r.endWith) {
|
|
return nil
|
|
}
|
|
return xerror.Invalid(
|
|
op,
|
|
fmt.Sprintf("'%s' should end with '%s', got '%s'", r.key, r.endWith, r.value),
|
|
nil,
|
|
)
|
|
}
|
|
|
|
/*
|
|
StringEndWith returns a RuleString for
|
|
validating that a string ends with
|
|
given string.
|
|
*/
|
|
func StringEndWith(endWith string) RuleString {
|
|
return ruleStringEndWith{
|
|
&baseRuleString{},
|
|
endWith,
|
|
}
|
|
}
|
|
|
|
// Compile-time checks to ensure type implements desired interfaces.
|
|
var (
|
|
_ = RuleString(new(ruleStringOneOf))
|
|
_ = RuleString(new(ruleStringStartWith))
|
|
_ = RuleString(new(ruleStringEndWith))
|
|
)
|