nilDereferenceAnalysis/common/model.go (37 lines of code) (raw):
package common
import "errors"
type User struct {
Age int
Name string
}
func NewUser(name string, age int) *User {
user, err := CreateUser(name, age)
if err != nil {
return nil
}
return user
}
func CreateUser(name string, age int) (*User, error) {
if !isValidName(name) {
return nil, errors.New("invalid name")
}
if !isValidAge(age) {
return nil, nil
}
return &User{Age: age, Name: name}, nil
}
func (u *User) Copy(ctx *Context) *User {
if ctx.isDebugEnabled {
logUserEvent("copy user", u)
}
if u == nil {
return nil
}
return &User{Age: u.Age, Name: u.Name}
}
func isValidName(name string) bool {
return len(name) > 0
}
func isValidAge(age int) bool {
return age >= 0
}