2024-12-27 21:00:07 +01:00

57 lines
1.2 KiB
GDScript

static func to_dict_(
key_mapper : Callable,
element_mapper : Callable = GDRx.basic.identity
) -> Callable:
var to_dict = func(source : Observable) -> Observable:
# """Converts the observable sequence to a Map if it exists.
#
# Args:
# source: Source observable to convert.
#
# Returns:
# An observable sequence with a single value of a dictionary
# containing the values from the observable sequence.
# """
var subscribe = func(
observer : ObserverBase,
scheduler : SchedulerBase = null
) -> DisposableBase:
var m = RefValue.Set({})
var on_next = func(x):
var key = RefValue.Null()
if GDRx.try(func():
key.v = key_mapper.call(x)
) \
.catch("Error", func(e):
observer.on_error(e)
) \
.end_try_catch(): return
var element = RefValue.Null()
if GDRx.try(func():
element.v = element_mapper.call(x)
) \
.catch("Error", func(e):
observer.on_error(e)
) \
.end_try_catch(): return
m.v[key.v] = element.v
var on_completed = func():
observer.on_next.call(m.v)
m.v = {}
observer.on_completed()
return source.subscribe(
on_next, observer.on_error, on_completed,
scheduler
)
return Observable.new(subscribe)
return to_dict