You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

option.go 667B

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