type RequestClientRegister struct {
	UserId     uuid.UUID `json:"user_id" required:"true" description:"keycloak user id"`
	Name       string    `json:"name,omitempty" required:"true" description:"name"`
	MiddleName string    `json:"middle_name,omitempty" required:"true" description:"middle name"`
}
 
func (request *RequestClientRegister) CheckFields() error {
 
	types := reflect.TypeOf(request).Elem()
	fields := reflect.ValueOf(request).Elem()
 
	err := checkRequiredFields(types, fields)
 
	return err
 
}
func checkRequiredFields(types reflect.Type, fields reflect.Value) error {
 
	for i := 0; i < types.NumField(); i++ {
 
		valueField := types.Field(i)
		isEmpty := fields.Field(i).IsZero()
		column := valueField.Tag.Get("required")
 
		isRequired, err := strconv.ParseBool(column)
		if err != nil {
			return err
		}
 
		if (isRequired) && (isEmpty == true) {
			err = errors.New("Required field on given struct is empty")
			return err
 
		}
 
	}
	
	return nil
	
}
func TestStructChecker(t *testing.T) {
 
	register2 := api.RequestClientRegister{uuid.Nil, "", ""}
	err := register2.CheckFields()
	if err != nil {
		log.Println(err)
	}
 
	//
 
	var register = api.RequestClientRegister{uuid.New(), "batata", "jones"}
	err = register.CheckFields()
	if err != nil {
		log.Println(err)
		t.FailNow()
	}
}

🌱 Back to Garden