mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 02:04:11 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			57 lines
		
	
	
		
			907 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			907 B
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2024 The Gitea Authors. All rights reserved.
 | 
						|
// SPDX-License-Identifier: MIT
 | 
						|
 | 
						|
package optional
 | 
						|
 | 
						|
import "strconv"
 | 
						|
 | 
						|
type Option[T any] []T
 | 
						|
 | 
						|
func None[T any]() Option[T] {
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
func Some[T any](v T) Option[T] {
 | 
						|
	return Option[T]{v}
 | 
						|
}
 | 
						|
 | 
						|
func FromPtr[T any](v *T) Option[T] {
 | 
						|
	if v == nil {
 | 
						|
		return None[T]()
 | 
						|
	}
 | 
						|
	return Some(*v)
 | 
						|
}
 | 
						|
 | 
						|
func FromNonDefault[T comparable](v T) Option[T] {
 | 
						|
	var zero T
 | 
						|
	if v == zero {
 | 
						|
		return None[T]()
 | 
						|
	}
 | 
						|
	return Some(v)
 | 
						|
}
 | 
						|
 | 
						|
func (o Option[T]) Has() bool {
 | 
						|
	return o != nil
 | 
						|
}
 | 
						|
 | 
						|
func (o Option[T]) Value() T {
 | 
						|
	var zero T
 | 
						|
	return o.ValueOrDefault(zero)
 | 
						|
}
 | 
						|
 | 
						|
func (o Option[T]) ValueOrDefault(v T) T {
 | 
						|
	if o.Has() {
 | 
						|
		return o[0]
 | 
						|
	}
 | 
						|
	return v
 | 
						|
}
 | 
						|
 | 
						|
// ParseBool get the corresponding optional.Option[bool] of a string using strconv.ParseBool
 | 
						|
func ParseBool(s string) Option[bool] {
 | 
						|
	v, e := strconv.ParseBool(s)
 | 
						|
	if e != nil {
 | 
						|
		return None[bool]()
 | 
						|
	}
 | 
						|
	return Some(v)
 | 
						|
}
 |