public IPushState MutatedClone(Action <MutablePushState> func)
        {
            MutablePushState clone = MutableClone();

            func(clone);
            return(clone);
        }
        public override bool Equals(object obj)
        {
            if (obj == null || !(obj is MutablePushState))
            {
                return(false);
            }

            MutablePushState other = obj as MutablePushState;

            return(Equals(Query, other.Query) &&
                   Channels.CollectionsEqual(other.Channels) &&
                   Equals(Expiration, other.Expiration) &&
                   Equals(ExpirationInterval, other.ExpirationInterval) &&
                   Equals(PushTime, other.PushTime) &&
                   Data.CollectionsEqual(other.Data) &&
                   Equals(Alert, other.Alert));
        }