func()

in lib/go-tc/users.go [346:472]


func (u *CurrentUserUpdateRequestUser) UnmarshalAndValidate(user *User) error {
	errs := []error{}
	if u.AddressLine1 != nil {
		if err := json.Unmarshal(u.AddressLine1, &user.AddressLine1); err != nil {
			errs = append(errs, fmt.Errorf("addressLine1: %w", err))
		}
	}

	if u.AddressLine2 != nil {
		if err := json.Unmarshal(u.AddressLine2, &user.AddressLine2); err != nil {
			errs = append(errs, fmt.Errorf("addressLine2: %w", err))
		}
	}

	if u.City != nil {
		if err := json.Unmarshal(u.City, &user.City); err != nil {
			errs = append(errs, fmt.Errorf("city: %w", err))
		}
	}

	if u.Company != nil {
		if err := json.Unmarshal(u.Company, &user.Company); err != nil {
			errs = append(errs, fmt.Errorf("company: %w", err))
		}
	}

	user.ConfirmLocalPassword = u.ConfirmLocalPasswd
	user.LocalPassword = u.LocalPasswd

	if u.Country != nil {
		if err := json.Unmarshal(u.Country, &user.Country); err != nil {
			errs = append(errs, fmt.Errorf("country: %w", err))
		}
	}

	if u.Email != nil {
		if err := json.Unmarshal(u.Email, &user.Email); err != nil {
			errs = append(errs, fmt.Errorf("email: %w", err))
		} else if user.Email == nil || *user.Email == "" {
			errs = append(errs, errors.New("email: cannot be null or an empty string"))
		} else if err = validation.Validate(*user.Email, is.Email); err != nil {
			errs = append(errs, err)
		}
	}

	if u.FullName != nil {
		if err := json.Unmarshal(u.FullName, &user.FullName); err != nil {
			errs = append(errs, fmt.Errorf("fullName: %w", err))
		} else if user.FullName == nil || *user.FullName == "" {
			// Perl enforced this
			errs = append(errs, errors.New("fullName: cannot be set to 'null' or empty string"))
		}
	}

	if u.GID != nil {
		if err := json.Unmarshal(u.GID, &user.GID); err != nil {
			errs = append(errs, fmt.Errorf("gid: %w", err))
		}
	}

	if u.ID != nil {
		var uid int
		if err := json.Unmarshal(u.ID, &uid); err != nil {
			errs = append(errs, fmt.Errorf("id: %w", err))
		} else if user.ID != nil && *user.ID != uid {
			errs = append(errs, errors.New("id: cannot change user id"))
		} else {
			user.ID = &uid
		}
	}

	if u.PhoneNumber != nil {
		if err := json.Unmarshal(u.PhoneNumber, &user.PhoneNumber); err != nil {
			errs = append(errs, fmt.Errorf("phoneNumber: %w", err))
		}
	}

	if u.PostalCode != nil {
		if err := json.Unmarshal(u.PostalCode, &user.PostalCode); err != nil {
			errs = append(errs, fmt.Errorf("postalCode: %w", err))
		}
	}

	if u.PublicSSHKey != nil {
		if err := json.Unmarshal(u.PublicSSHKey, &user.PublicSSHKey); err != nil {
			errs = append(errs, fmt.Errorf("publicSshKey: %w", err))
		}
	}

	if u.Role != nil {
		if err := json.Unmarshal(u.Role, &user.Role); err != nil {
			errs = append(errs, fmt.Errorf("role: %w", err))
		} else if user.Role == nil {
			errs = append(errs, errors.New("role: cannot be null"))
		}
	}

	if u.StateOrProvince != nil {
		if err := json.Unmarshal(u.StateOrProvince, &user.StateOrProvince); err != nil {
			errs = append(errs, fmt.Errorf("stateOrProvince: %w", err))
		}
	}

	if u.TenantID != nil {
		if err := json.Unmarshal(u.TenantID, &user.TenantID); err != nil {
			errs = append(errs, fmt.Errorf("tenantID: %w", err))
		} else if user.TenantID == nil {
			errs = append(errs, errors.New("tenantID: cannot be null"))
		}
	}

	if u.UID != nil {
		if err := json.Unmarshal(u.UID, &user.UID); err != nil {
			errs = append(errs, fmt.Errorf("uid: %w", err))
		}
	}

	if u.Username != nil {
		if err := json.Unmarshal(u.Username, &user.Username); err != nil {
			errs = append(errs, fmt.Errorf("username: %w", err))
		} else if user.Username == nil || *user.Username == "" {
			errs = append(errs, errors.New("username: cannot be null or empty string"))
		}
	}

	return util.JoinErrs(errs)
}