public static MessageCandidate CreateValidMessageCandidate( string token, IEnumerable <ObjectProperty> superProperties, object rawProperties, object distinctId, MixpanelConfig config, out string errorMessage) { var messageCandidate = new MessageCandidate( token, superProperties, rawProperties, distinctId, config, TrackSpecialPropertyMapper.RawNameToSpecialProperty); ObjectProperty tokenProp = messageCandidate.GetSpecialProperty(TrackSpecialProperty.Token); if (tokenProp == null) { errorMessage = $"'{TrackSpecialProperty.Token}' is not set."; return(null); } ValueParseResult tokenParseResult = TrackSpecialPropertyParser.Parse(TrackSpecialProperty.Token, tokenProp.Value); if (!tokenParseResult.Success) { errorMessage = $"Error parsing '{TrackSpecialProperty.Token}'. {tokenParseResult.ErrorDetails}"; return(null); } errorMessage = null; return(messageCandidate); }
public static MessageBuildResult Build( string token, string @event, IEnumerable <ObjectProperty> superProperties, object rawProperties, object distinctId, MixpanelConfig config) { if (string.IsNullOrWhiteSpace(@event)) { return(MessageBuildResult.CreateFail($"'{nameof(@event)}' is not set.")); } MessageCandidate messageCandidate = TrackMessageBuilderBase.CreateValidMessageCandidate( token, superProperties, rawProperties, distinctId, config, out string messageCandidateErrorMessage); if (messageCandidate == null) { return(MessageBuildResult.CreateFail(messageCandidateErrorMessage)); } var message = new Dictionary <string, object>(2); message["event"] = @event; var properties = new Dictionary <string, object>(); message["properties"] = properties; // Special properties foreach (KeyValuePair <string, ObjectProperty> pair in messageCandidate.SpecialProperties) { string specialPropertyName = pair.Key; ObjectProperty objectProperty = pair.Value; ValueParseResult result = TrackSpecialPropertyParser.Parse(specialPropertyName, objectProperty.Value); if (!result.Success) { // The only required special properties are 'event' and 'token' which are controlled separately continue; } properties[specialPropertyName] = result.Value; } // User properties foreach (KeyValuePair <string, ObjectProperty> pair in messageCandidate.UserProperties) { string formattedPropertyName = pair.Key; ObjectProperty objectProperty = pair.Value; ValueParseResult result = GenericPropertyParser.Parse(objectProperty.Value, allowCollections: true); if (!result.Success) { continue; } properties[formattedPropertyName] = result.Value; } return(MessageBuildResult.CreateSuccess(message)); }