code.gitea.io/gitea@v1.22.3/modules/optional/option.go (about) 1 // Copyright 2024 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package optional 5 6 type Option[T any] []T 7 8 func None[T any]() Option[T] { 9 return nil 10 } 11 12 func Some[T any](v T) Option[T] { 13 return Option[T]{v} 14 } 15 16 func FromPtr[T any](v *T) Option[T] { 17 if v == nil { 18 return None[T]() 19 } 20 return Some(*v) 21 } 22 23 func FromNonDefault[T comparable](v T) Option[T] { 24 var zero T 25 if v == zero { 26 return None[T]() 27 } 28 return Some(v) 29 } 30 31 func (o Option[T]) Has() bool { 32 return o != nil 33 } 34 35 func (o Option[T]) Value() T { 36 var zero T 37 return o.ValueOrDefault(zero) 38 } 39 40 func (o Option[T]) ValueOrDefault(v T) T { 41 if o.Has() { 42 return o[0] 43 } 44 return v 45 }