static bool InitialStatesAreEqual(EmbeddingDefinition newDefinition, EmbeddingDefinition oldDefinition, out EmbeddingDefinitionComparisonResult failedComparison)
 {
     failedComparison = null;
     if (newDefinition.InititalState == oldDefinition.InititalState)
     {
         return(true);
     }
     failedComparison = EmbeddingDefinitionComparisonResult.Unequal("The initial Embedding state is not the same as the persisted definition");
     return(false);
 }
 static EmbeddingDefinitionComparisonResult DefinitionsAreEqual(
     EmbeddingDefinition newDefinition,
     EmbeddingDefinition oldDefinition)
 {
     if (newDefinition.Embedding != oldDefinition.Embedding)
     {
         return(EmbeddingDefinitionComparisonResult.Unequal($"The new Embedding identifier {newDefinition.Embedding.Value} is not the same as the persisted embedding identifier {oldDefinition.Embedding.Value}"));
     }
     if (!InitialStatesAreEqual(newDefinition, oldDefinition, out var failedComparison))
     {
         return(failedComparison);
     }
     return(!EventsAreEqual(newDefinition, oldDefinition, out failedComparison)
         ? failedComparison
         : EmbeddingDefinitionComparisonResult.Equal);
 }
    static bool EventsAreEqual(EmbeddingDefinition newDefinition, EmbeddingDefinition oldDefinition, out EmbeddingDefinitionComparisonResult failedComparison)
    {
        failedComparison = null;
        if (newDefinition.Events.Count() != oldDefinition.Events.Count())
        {
            failedComparison = EmbeddingDefinitionComparisonResult.Unequal("The definitions does not have the same number of events");
            return(false);
        }

        foreach (var newEvent in newDefinition.Events)
        {
            var oldEvent = oldDefinition.Events.FirstOrDefault(oldEvent => oldEvent.Id == newEvent.Id);
            if (oldEvent != default)
            {
                continue;
            }
            failedComparison = EmbeddingDefinitionComparisonResult.Unequal($"Event {newEvent.Id.Value} was not in previous Embedding definition");
            return(false);
        }

        return(true);
    }