func (p *Parts) AddOr() {
	p.AddType(PartTypeOr)
}
AddOr adds a part type or
package data
import (
	"fmt"
	"math/rand"
	"regexp"
	"strconv"
	"strings"
)
var (
	ErrorNotSupported = fmt.Errorf("part type is not supported")
)
type PartType int
const (
	PartTypeLiteral PartType = iota
	PartTypeNumber
	PartTypeName
	PartTypeOr
	PartTypeHexOr
	PartTypeAnd
	PartTypeSpaces
	PartTypeSpacesOptional
	PartTypeHexSpaces
	PartTypeHexSpacesOptional
	PartTypeComment
	PartTypeObfuscated
	PartTypeObfuscatedWithComments
	PartTypeHex
	PartTypeNumberList
	PartTypeScientificNumber
	PartTypeSQL
)
type Part struct {
	PartType
	Variable int
	Literal  string
	Max      int
	Parts    *Parts
}
type Parts struct {
	Parts []Part
}
func NewParts() *Parts {
	return &Parts{
		Parts: make([]Part, 0, 16),
	}
}
func (p *Parts) AddType(partType PartType) {
	part := Part{
		PartType: partType,
	}
	p.Parts = append(p.Parts, part)
	return
}
func (p *Parts) AddParts(partType PartType, adder func(p *Parts)) {
	part := Part{
		PartType: partType,
		Parts:    NewParts(),
	}
	adder(part.Parts)
	p.Parts = append(p.Parts, part)
}
func (p *Parts) AddLiteral(literal string) {
	part := Part{
		PartType: PartTypeLiteral,
		Literal:  literal,
	}
	p.Parts = append(p.Parts, part)
	return
}
func (p *Parts) AddNumber(variable, max int) {
	part := Part{
		PartType: PartTypeNumber,
		Variable: variable,
		Max:      max,
	}
	p.Parts = append(p.Parts, part)
	return
}
func (p *Parts) AddName(variable int) {
	part := Part{
		PartType: PartTypeName,
		Variable: variable,
	}
	p.Parts = append(p.Parts, part)
	return
}