package faker
import (
"fmt"
"reflect"
"github.com/bxcodec/faker/v4/pkg/options"
"golang.org/x/text/cases"
"golang.org/x/text/language"
)
var wordList = []string{
"alias", "consequatur", "aut", "perferendis", "sit", "voluptatem",
"accusantium", "doloremque", "aperiam", "eaque", "ipsa", "quae", "ab",
"illo", "inventore", "veritatis", "et", "quasi", "architecto",
"beatae", "vitae", "dicta", "sunt", "explicabo", "aspernatur", "aut",
"odit", "aut", "fugit", "sed", "quia", "consequuntur", "magni",
"dolores", "eos", "qui", "ratione", "voluptatem", "sequi", "nesciunt",
"neque", "dolorem", "ipsum", "quia", "dolor", "sit", "amet",
"consectetur", "adipisci", "velit", "sed", "quia", "non", "numquam",
"eius", "modi", "tempora", "incidunt", "ut", "labore", "et", "dolore",
"magnam", "aliquam", "quaerat", "voluptatem", "ut", "enim", "ad",
"minima", "veniam", "quis", "nostrum", "exercitationem", "ullam",
"corporis", "nemo", "enim", "ipsam", "voluptatem", "quia", "voluptas",
"sit", "suscipit", "laboriosam", "nisi", "ut", "aliquid", "ex", "ea",
"commodi", "consequatur", "quis", "autem", "vel", "eum", "iure",
"reprehenderit", "qui", "in", "ea", "voluptate", "velit", "esse",
"quam", "nihil", "molestiae", "et", "iusto", "odio", "dignissimos",
"ducimus", "qui", "blanditiis", "praesentium", "laudantium", "totam",
"rem", "voluptatum", "deleniti", "atque", "corrupti", "quos",
"dolores", "et", "quas", "molestias", "excepturi", "sint",
"occaecati", "cupiditate", "non", "provident", "sed", "ut",
"perspiciatis", "unde", "omnis", "iste", "natus", "error",
"similique", "sunt", "in", "culpa", "qui", "officia", "deserunt",
"mollitia", "animi", "id", "est", "laborum", "et", "dolorum", "fuga",
"et", "harum", "quidem", "rerum", "facilis", "est", "et", "expedita",
"distinctio", "nam", "libero", "tempore", "cum", "soluta", "nobis",
"est", "eligendi", "optio", "cumque", "nihil", "impedit", "quo",
"porro", "quisquam", "est", "qui", "minus", "id", "quod", "maxime",
"placeat", "facere", "possimus", "omnis", "voluptas", "assumenda",
"est", "omnis", "dolor", "repellendus", "temporibus", "autem",
"quibusdam", "et", "aut", "consequatur", "vel", "illum", "qui",
"dolorem", "eum", "fugiat", "quo", "voluptas", "nulla", "pariatur",
"at", "vero", "eos", "et", "accusamus", "officiis", "debitis", "aut",
"rerum", "necessitatibus", "saepe", "eveniet", "ut", "et",
"voluptates", "repudiandae", "sint", "et", "molestiae", "non",
"recusandae", "itaque", "earum", "rerum", "hic", "tenetur", "a",
"sapiente", "delectus", "ut", "aut", "reiciendis", "voluptatibus",
"maiores", "doloribus", "asperiores", "repellat",
}
type DataFaker interface {
Word(v reflect.Value) (interface{}, error)
Sentence(v reflect.Value) (interface{}, error)
Paragraph(v reflect.Value) (interface{}, error)
}
func GetLorem() DataFaker {
lorem := &Lorem{}
return lorem
}
type Lorem struct {
}
func (l Lorem) word() string {
return randomElementFromSliceString(wordList)
}
func (l Lorem) Word(v reflect.Value) (interface{}, error) {
return l.word(), nil
}
func Word(opts ...options.OptionFunc) string {
i := Lorem{}
return singleFakeData(WORD, func() interface{} {
return i.word()
}, opts...).(string)
}
func (l Lorem) sentence() string {
sentence := ""
r, _ := RandomInt(1, 6)
size := len(r)
for key, val := range r {
if key == 0 {
sentence += cases.Title(language.Und, cases.NoLower).String(wordList[val])
} else {
sentence += wordList[val]
}
if key != size-1 {
sentence += " "
}
}
return fmt.Sprintf("%s.", sentence)
}
func (l Lorem) Sentence(v reflect.Value) (interface{}, error) {
sentence := l.sentence()
return sentence, nil
}
func Sentence(opts ...options.OptionFunc) string {
i := Lorem{}
return singleFakeData(SENTENCE, func() interface{} {
return i.sentence()
}, opts...).(string)
}
func (l Lorem) paragraph() string {
paragraph := ""
size := rand.Intn(10) + 1
for i := 0; i < size; i++ {
paragraph += l.sentence()
if i != size-1 {
paragraph += " "
}
}
return paragraph
}
func (l Lorem) Paragraph(v reflect.Value) (interface{}, error) {
return l.paragraph(), nil
}
func Paragraph(opts ...options.OptionFunc) string {
i := Lorem{}
return singleFakeData(PARAGRAPH, func() interface{} {
return i.paragraph()
}, opts...).(string)
}