Turn a function call that take a single callback function to return a value
then wait for callback to return another value to continue it execution into a function
that return a Future which resolve to a struct that is Deref into a result and
it will automatically return value to a function when it is dropped.