57 lines
1.2 KiB
GDScript
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
|