package generics

type Result[T any] struct {
	Ok  T
	Err error
}

func ResultFromTuple[T any](t T, err error) Result[T] {
	return Result[T]{
		Ok:  t,
		Err: err,
	}
}

func (r Result[T]) AsTuple() (T, error) {
	return r.Ok, r.Err
}

func (r Result[T]) Unwrap() T {
	if r.Err != nil {
		panic(r.Err)
	}
	return r.Ok
}

func (r Result[T]) ToOption() Option[T] {
	return Option[T]{
		Ok:    r.Err == nil,
		Value: r.Ok,
	}
}
