internal override sealed MutationResult Mutate(IReadOnlyDictionary <FragmentKey, Fragment> state, FragmentKey key, Guid requester)
        {
            MutationResult result;

            if (state.TryGetValue(key, out Fragment fragment))
            {
                if (!(fragment is T fragmentT))
                {
                    log.Warning($"Can not {GetType().Name} a {typeof(T).Name} at fragment[{key.AsString()}], because that fragment is of type {fragment.GetType().Name}.");
                    return(MutationResult.FragmentTypeMismatchFailure);
                }
                result = Update(fragmentT, state, key, requester);
                if (result == null)
                {
                    log.Warning($"{GetType().Name}.Update returned null, which is not allowed.");
                    return(MutationResult.ResultNullFailure);
                }
            }
            else
            {
                result = Insert(state, key, requester);
                if (result == null)
                {
                    log.Warning($"{GetType().Name}.Insert returned null, which is not allowed.");
                    return(MutationResult.ResultNullFailure);
                }
            }
            return(result);
        }
        internal override MutationResult Mutate(IReadOnlyDictionary <FragmentKey, Fragment> state, FragmentKey key, Guid requester)
        {
            if (state.ContainsKey(key))
            {
                log.Warning($"Can not {GetType().Name} a {typeof(T).Name} at fragment[{key.AsString()}], because that fragment already exists.");
                return(MutationResult.FragmentAlreadyExistsFailure);
            }
            InsertResult <T> result = Insert(state, key, requester);

            if (result == null)
            {
                log.Warning($"{GetType()}.Insert returned null, while this is not allowed.");
                return(MutationResult.ResultNullFailure);
            }
            return(result);
        }