1package faker
2
3import (
4 "fmt"
5 "reflect"
6
7 "github.com/go-faker/faker/v4/pkg/options"
8)
9
10var bloodTypes = []string{"O", "A", "B", "AB"}
11var bloodRhFactors = []string{"+", "-"}
12
13func GetBlood(opts ...options.OptionFunc) Blooder {
14 opt := options.BuildOptions(opts)
15 db := &Blood{
16 fakerOption: *opt,
17 }
18 return db
19}
20
21type Blooder interface {
22 BloodType(v reflect.Value) (interface{}, error)
23 BloodRHFactor(v reflect.Value) (interface{}, error)
24 BloodGroup(v reflect.Value) (interface{}, error)
25}
26
27// Internet struct
28type Blood struct {
29 fakerOption options.Options
30}
31
32func (b Blood) bloodType() string {
33 return randomElementFromSliceString(bloodTypes)
34}
35
36func (b Blood) BloodType(v reflect.Value) (interface{}, error) {
37 return b.bloodType(), nil
38}
39
40func (b Blood) bloodRhFactor() string {
41 return randomElementFromSliceString(bloodRhFactors)
42}
43
44func (b Blood) BloodRHFactor(v reflect.Value) (interface{}, error) {
45 return b.bloodRhFactor(), nil
46}
47
48func (b Blood) bloodGroup() string {
49 return fmt.Sprintf("%s%s", b.bloodType(), b.bloodRhFactor())
50}
51
52func (b Blood) BloodGroup(v reflect.Value) (interface{}, error) {
53 return b.bloodGroup(), nil
54}