qvm/vendor/github.com/samber/mo/task.go
Joshua Bell f501abe660 vendor
2026-01-26 21:41:26 -06:00

175 lines
5.2 KiB
Go

package mo
// NewTask instanciates a new Task.
func NewTask[R any](f ff0[R]) Task[R] {
return Task[R]{
unsafePerform: f,
}
}
// NewTaskFromIO instanciates a new Task from an existing IO.
func NewTaskFromIO[R any](io IO[R]) Task[R] {
return Task[R]{
unsafePerform: func() *Future[R] {
return NewFuture[R](func(resolve func(R), reject func(error)) {
resolve(io.unsafePerform())
})
},
}
}
// Task represents a non-deterministic asynchronous computation that
// can cause side effects, yields a value of type `R` and never fails.
type Task[R any] struct {
unsafePerform ff0[R]
}
// Run execute the non-deterministic asynchronous computation, with side effect.
func (t Task[R]) Run() *Future[R] {
return t.unsafePerform()
}
// NewTask1 instanciates a new Task1.
func NewTask1[R any, A any](f ff1[R, A]) Task1[R, A] {
return Task1[R, A]{
unsafePerform: f,
}
}
// NewTaskFromIO1 instanciates a new Task1 from an existing IO1.
func NewTaskFromIO1[R any, A any](io IO1[R, A]) Task1[R, A] {
return Task1[R, A]{
unsafePerform: func(a A) *Future[R] {
return NewFuture[R](func(resolve func(R), reject func(error)) {
resolve(io.unsafePerform(a))
})
},
}
}
// Task1 represents a non-deterministic asynchronous computation that
// can cause side effects, yields a value of type `R` and never fails.
type Task1[R any, A any] struct {
unsafePerform ff1[R, A]
}
// Run execute the non-deterministic asynchronous computation, with side effect.
func (t Task1[R, A]) Run(a A) *Future[R] {
return t.unsafePerform(a)
}
// NewTask2 instanciates a new Task2.
func NewTask2[R any, A any, B any](f ff2[R, A, B]) Task2[R, A, B] {
return Task2[R, A, B]{
unsafePerform: f,
}
}
// NewTaskFromIO2 instanciates a new Task2 from an existing IO2.
func NewTaskFromIO2[R any, A any, B any](io IO2[R, A, B]) Task2[R, A, B] {
return Task2[R, A, B]{
unsafePerform: func(a A, b B) *Future[R] {
return NewFuture[R](func(resolve func(R), reject func(error)) {
resolve(io.unsafePerform(a, b))
})
},
}
}
// Task2 represents a non-deterministic asynchronous computation that
// can cause side effects, yields a value of type `R` and never fails.
type Task2[R any, A any, B any] struct {
unsafePerform ff2[R, A, B]
}
// Run execute the non-deterministic asynchronous computation, with side effect.
func (t Task2[R, A, B]) Run(a A, b B) *Future[R] {
return t.unsafePerform(a, b)
}
// NewTask3 instanciates a new Task3.
func NewTask3[R any, A any, B any, C any](f ff3[R, A, B, C]) Task3[R, A, B, C] {
return Task3[R, A, B, C]{
unsafePerform: f,
}
}
// NewTaskFromIO3 instanciates a new Task3 from an existing IO3.
func NewTaskFromIO3[R any, A any, B any, C any](io IO3[R, A, B, C]) Task3[R, A, B, C] {
return Task3[R, A, B, C]{
unsafePerform: func(a A, b B, c C) *Future[R] {
return NewFuture[R](func(resolve func(R), reject func(error)) {
resolve(io.unsafePerform(a, b, c))
})
},
}
}
// Task3 represents a non-deterministic asynchronous computation that
// can cause side effects, yields a value of type `R` and never fails.
type Task3[R any, A any, B any, C any] struct {
unsafePerform ff3[R, A, B, C]
}
// Run execute the non-deterministic asynchronous computation, with side effect.
func (t Task3[R, A, B, C]) Run(a A, b B, c C) *Future[R] {
return t.unsafePerform(a, b, c)
}
// NewTask4 instanciates a new Task4.
func NewTask4[R any, A any, B any, C any, D any](f ff4[R, A, B, C, D]) Task4[R, A, B, C, D] {
return Task4[R, A, B, C, D]{
unsafePerform: f,
}
}
// NewTaskFromIO4 instanciates a new Task4 from an existing IO4.
func NewTaskFromIO4[R any, A any, B any, C any, D any](io IO4[R, A, B, C, D]) Task4[R, A, B, C, D] {
return Task4[R, A, B, C, D]{
unsafePerform: func(a A, b B, c C, d D) *Future[R] {
return NewFuture[R](func(resolve func(R), reject func(error)) {
resolve(io.unsafePerform(a, b, c, d))
})
},
}
}
// Task4 represents a non-deterministic asynchronous computation that
// can cause side effects, yields a value of type `R` and never fails.
type Task4[R any, A any, B any, C any, D any] struct {
unsafePerform ff4[R, A, B, C, D]
}
// Run execute the non-deterministic asynchronous computation, with side effect.
func (t Task4[R, A, B, C, D]) Run(a A, b B, c C, d D) *Future[R] {
return t.unsafePerform(a, b, c, d)
}
// NewTask5 instanciates a new Task5.
func NewTask5[R any, A any, B any, C any, D any, E any](f ff5[R, A, B, C, D, E]) Task5[R, A, B, C, D, E] {
return Task5[R, A, B, C, D, E]{
unsafePerform: f,
}
}
// NewTaskFromIO5 instanciates a new Task5 from an existing IO5.
func NewTaskFromIO5[R any, A any, B any, C any, D any, E any](io IO5[R, A, B, C, D, E]) Task5[R, A, B, C, D, E] {
return Task5[R, A, B, C, D, E]{
unsafePerform: func(a A, b B, c C, d D, e E) *Future[R] {
return NewFuture[R](func(resolve func(R), reject func(error)) {
resolve(io.unsafePerform(a, b, c, d, e))
})
},
}
}
// Task5 represents a non-deterministic asynchronous computation that
// can cause side effects, yields a value of type `R` and never fails.
type Task5[R any, A any, B any, C any, D any, E any] struct {
unsafePerform ff5[R, A, B, C, D, E]
}
// Run execute the non-deterministic asynchronous computation, with side effect.
func (t Task5[R, A, B, C, D, E]) Run(a A, b B, c C, d D, e E) *Future[R] {
return t.unsafePerform(a, b, c, d, e)
}