/**
         * <summary>
         * Wraps cache request into a protocol message.</summary>
         *
         * <param name="req">Cache request that need to be wrapped.</param>
         * <returns>Wrapped message.</returns>
         */
        private static ProtoRequest WrapCacheRequest(GridClientCacheRequest req)
        {
            ProtoCacheRequest.Builder builder = ProtoCacheRequest.CreateBuilder()
                                                .SetOperation((ProtoCacheRequest.Types.GridCacheOperation)req.Operation);

            if (req.CacheName != null)
            {
                builder.SetCacheName(req.CacheName);
            }

            if (req.CacheFlags != 0)
            {
                builder.SetCacheFlagsOn(req.CacheFlags);
            }

            if (req.Key != null)
            {
                builder.SetKey(WrapObject(req.Key));
            }

            if (req.Value != null)
            {
                builder.SetValue(WrapObject(req.Value));
            }

            if (req.Value2 != null)
            {
                builder.SetValue2(WrapObject(req.Value2));
            }

            if (req.Values != null)
            {
                builder.SetValues(WrapMap(req.Values));
            }

            return(WrapRequest(req, builder.Build()));
        }