bool TryReadImmediateGiven(Event e, EventType type, out FlowCall.Given call)
        {
            call = null;

            var routes = type.GetRoutes(e).ToMany();

            if (routes.Contains(_topicKey) &&
                TryGetObservation(type, out var observation) &&
                observation.HasGiven(Event.IsScheduled(e)))
            {
                var point = new TimelinePoint(
                    _newPosition,
                    _cause,
                    type,
                    e.When,
                    Event.Traits.WhenOccurs.Get(e),
                    Event.Traits.EventId.Get(e),
                    Event.Traits.CommandId.Get(e),
                    Event.Traits.UserId.Get(e),
                    _topicKey,
                    routes,
                    () => e);

                call = new FlowCall.Given(point, observation);
            }

            return(call != null);
        }