public void WriteOutputEvent(object e)
        {
            _obj = _jsonWriter.Object();
            switch (e)
            {
            case EvaluationEvent ee:
                WriteEvaluationEvent(ee, false);
                break;

            case IdentifyEvent ie:
                WriteBase("identify", ie.Timestamp, ie.User?.Key);
                WriteUser(ie.User);
                break;

            case CustomEvent ce:
                WriteBase("custom", ce.Timestamp, ce.EventKey);
                WriteUserOrKey(ce.User, false, true);
                if (!ce.Data.IsNull)
                {
                    LdValueConverter.WriteJsonValue(ce.Data, _obj.Name("data"));
                }
                if (ce.MetricValue.HasValue)
                {
                    _obj.Name("metricValue").Double(ce.MetricValue.Value);
                }
                break;

            case AliasEvent ae:
                WriteBase("alias", ae.Timestamp, ae.Key);
                _obj.Name("contextKind").String(ae.ContextKind.ToIdentifier());
                _obj.Name("previousKey").String(ae.PreviousKey);
                _obj.Name("previousContextKind").String(ae.PreviousContextKind.ToIdentifier());
                break;

            case EventProcessorInternal.IndexEvent ie:
                WriteBase("index", ie.Timestamp, null);
                WriteUserOrKey(ie.User, true, false);
                break;

            case EventProcessorInternal.DebugEvent de:
                WriteEvaluationEvent(de.FromEvent, true);
                break;

            default:
                break;
            }
            _obj.End();
        }