diff --git a/modules/optional/option.go b/modules/optional/option.go index 5524b375d9..cbecf86987 100644 --- a/modules/optional/option.go +++ b/modules/optional/option.go @@ -28,18 +28,19 @@ func FromPtr[T any](v *T) Option[T] { return Some(*v) } -func FromNonDefaultFunc[T comparable](f T, isZero func(T) bool) Option[T] { - if isZero(f) { - return None[T]() +func FromMapLookup[K comparable, V any](m map[K]V, k K) Option[V] { + if v, ok := m[k]; ok { + return Some(v) } - return Some(f) + return None[V]() } func FromNonDefault[T comparable](v T) Option[T] { - return FromNonDefaultFunc(v, func(v T) bool { - var zero T - return v == zero - }) + var zero T + if v == zero { + return None[T]() + } + return Some(v) } func (o Option[T]) Has() bool { diff --git a/modules/optional/option_test.go b/modules/optional/option_test.go index 36bcf0c745..ea80a2e3cb 100644 --- a/modules/optional/option_test.go +++ b/modules/optional/option_test.go @@ -57,9 +57,10 @@ func TestOption(t *testing.T) { assert.True(t, opt3.Has()) assert.Equal(t, int(1), opt3.Value()) - opt4 := optional.FromNonDefaultFunc(1, func(t int) bool { - return t == 1 - }) + opt4 := optional.FromMapLookup(map[string]int{"a": 1}, "a") + assert.True(t, opt4.Has()) + assert.Equal(t, 1, opt4.Value()) + opt4 = optional.FromMapLookup(map[string]int{"a": 1}, "b") assert.False(t, opt4.Has()) } diff --git a/routers/api/v1/admin/user.go b/routers/api/v1/admin/user.go index d689cdcb6d..494bace585 100644 --- a/routers/api/v1/admin/user.go +++ b/routers/api/v1/admin/user.go @@ -234,15 +234,13 @@ func EditUser(ctx *context.APIContext) { } opts := &user_service.UpdateOptions{ - FullName: optional.FromPtr(form.FullName), - Website: optional.FromPtr(form.Website), - Location: optional.FromPtr(form.Location), - Description: optional.FromPtr(form.Description), - IsActive: optional.FromPtr(form.Active), - IsAdmin: user_service.UpdateOptionFieldFromPtr(form.Admin), - Visibility: optional.FromNonDefaultFunc(api.VisibilityModes[form.Visibility], func(v api.VisibleType) bool { - return v < api.VisibleTypePublic || v > api.VisibleTypePrivate - }), + FullName: optional.FromPtr(form.FullName), + Website: optional.FromPtr(form.Website), + Location: optional.FromPtr(form.Location), + Description: optional.FromPtr(form.Description), + IsActive: optional.FromPtr(form.Active), + IsAdmin: user_service.UpdateOptionFieldFromPtr(form.Admin), + Visibility: optional.FromMapLookup(api.VisibilityModes, form.Visibility), AllowGitHook: optional.FromPtr(form.AllowGitHook), AllowImportLocal: optional.FromPtr(form.AllowImportLocal), MaxRepoCreation: optional.FromPtr(form.MaxRepoCreation), diff --git a/routers/api/v1/org/org.go b/routers/api/v1/org/org.go index d7656d4a92..cd67686065 100644 --- a/routers/api/v1/org/org.go +++ b/routers/api/v1/org/org.go @@ -387,13 +387,11 @@ func Edit(ctx *context.APIContext) { } opts := &user_service.UpdateOptions{ - FullName: optional.Some(form.FullName), - Description: optional.Some(form.Description), - Website: optional.Some(form.Website), - Location: optional.Some(form.Location), - Visibility: optional.FromNonDefaultFunc(api.VisibilityModes[form.Visibility], func(v api.VisibleType) bool { - return v < api.VisibleTypePublic || v > api.VisibleTypePrivate - }), + FullName: optional.Some(form.FullName), + Description: optional.Some(form.Description), + Website: optional.Some(form.Website), + Location: optional.Some(form.Location), + Visibility: optional.FromMapLookup(api.VisibilityModes, form.Visibility), RepoAdminChangeTeamAccess: optional.FromPtr(form.RepoAdminChangeTeamAccess), } if err := user_service.UpdateUser(ctx, ctx.Org.Organization.AsUser(), opts); err != nil {