0
0
mirror of https://github.com/go-gitea/gitea.git synced 2025-07-13 17:54:44 +02:00
This commit is contained in:
wxiaoguang 2025-07-11 00:42:56 +08:00
parent d87aa947ba
commit df080cf2f3
4 changed files with 25 additions and 27 deletions

View File

@ -28,18 +28,19 @@ func FromPtr[T any](v *T) Option[T] {
return Some(*v) return Some(*v)
} }
func FromNonDefaultFunc[T comparable](f T, isZero func(T) bool) Option[T] { func FromMapLookup[K comparable, V any](m map[K]V, k K) Option[V] {
if isZero(f) { if v, ok := m[k]; ok {
return None[T]() return Some(v)
} }
return Some(f) return None[V]()
} }
func FromNonDefault[T comparable](v T) Option[T] { func FromNonDefault[T comparable](v T) Option[T] {
return FromNonDefaultFunc(v, func(v T) bool {
var zero T var zero T
return v == zero if v == zero {
}) return None[T]()
}
return Some(v)
} }
func (o Option[T]) Has() bool { func (o Option[T]) Has() bool {

View File

@ -57,9 +57,10 @@ func TestOption(t *testing.T) {
assert.True(t, opt3.Has()) assert.True(t, opt3.Has())
assert.Equal(t, int(1), opt3.Value()) assert.Equal(t, int(1), opt3.Value())
opt4 := optional.FromNonDefaultFunc(1, func(t int) bool { opt4 := optional.FromMapLookup(map[string]int{"a": 1}, "a")
return t == 1 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()) assert.False(t, opt4.Has())
} }

View File

@ -240,9 +240,7 @@ func EditUser(ctx *context.APIContext) {
Description: optional.FromPtr(form.Description), Description: optional.FromPtr(form.Description),
IsActive: optional.FromPtr(form.Active), IsActive: optional.FromPtr(form.Active),
IsAdmin: user_service.UpdateOptionFieldFromPtr(form.Admin), IsAdmin: user_service.UpdateOptionFieldFromPtr(form.Admin),
Visibility: optional.FromNonDefaultFunc(api.VisibilityModes[form.Visibility], func(v api.VisibleType) bool { Visibility: optional.FromMapLookup(api.VisibilityModes, form.Visibility),
return v < api.VisibleTypePublic || v > api.VisibleTypePrivate
}),
AllowGitHook: optional.FromPtr(form.AllowGitHook), AllowGitHook: optional.FromPtr(form.AllowGitHook),
AllowImportLocal: optional.FromPtr(form.AllowImportLocal), AllowImportLocal: optional.FromPtr(form.AllowImportLocal),
MaxRepoCreation: optional.FromPtr(form.MaxRepoCreation), MaxRepoCreation: optional.FromPtr(form.MaxRepoCreation),

View File

@ -391,9 +391,7 @@ func Edit(ctx *context.APIContext) {
Description: optional.Some(form.Description), Description: optional.Some(form.Description),
Website: optional.Some(form.Website), Website: optional.Some(form.Website),
Location: optional.Some(form.Location), Location: optional.Some(form.Location),
Visibility: optional.FromNonDefaultFunc(api.VisibilityModes[form.Visibility], func(v api.VisibleType) bool { Visibility: optional.FromMapLookup(api.VisibilityModes, form.Visibility),
return v < api.VisibleTypePublic || v > api.VisibleTypePrivate
}),
RepoAdminChangeTeamAccess: optional.FromPtr(form.RepoAdminChangeTeamAccess), RepoAdminChangeTeamAccess: optional.FromPtr(form.RepoAdminChangeTeamAccess),
} }
if err := user_service.UpdateUser(ctx, ctx.Org.Organization.AsUser(), opts); err != nil { if err := user_service.UpdateUser(ctx, ctx.Org.Organization.AsUser(), opts); err != nil {