All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.tonivade.resp.protocol.LambdaRedisTokenVisitor Maven / Gradle / Ivy

Go to download

Netty implementation of REdis Serialization Protocol, and a simple framework to implement command based protocols

There is a newer version: 0.24.0
Show newest version
/*
 * Copyright (c) 2016-2019, Antonio Gabriel Muñoz Conejo 
 * Distributed under the terms of the MIT License
 */
package com.github.tonivade.resp.protocol;

import java.util.function.Function;

import com.github.tonivade.resp.protocol.AbstractRedisToken.ArrayRedisToken;
import com.github.tonivade.resp.protocol.AbstractRedisToken.ErrorRedisToken;
import com.github.tonivade.resp.protocol.AbstractRedisToken.IntegerRedisToken;
import com.github.tonivade.resp.protocol.AbstractRedisToken.StatusRedisToken;
import com.github.tonivade.resp.protocol.AbstractRedisToken.StringRedisToken;
import com.github.tonivade.resp.protocol.AbstractRedisToken.UnknownRedisToken;

class LambdaRedisTokenVisitor implements RedisTokenVisitor {

  private Function onArray;
  private Function onStatus;
  private Function onString;
  private Function onError;
  private Function onInteger;
  private Function onUnknown;

  LambdaRedisTokenVisitor(Function onArray, Function onStatus,
      Function onString, Function onError,
      Function onInteger, Function onUnknown) {
    this.onArray = onArray;
    this.onStatus = onStatus;
    this.onString = onString;
    this.onError = onError;
    this.onInteger = onInteger;
    this.onUnknown = onUnknown;
  }

  @Override
  public T array(ArrayRedisToken token) {
    return onArray.apply(token);
  }

  @Override
  public T status(StatusRedisToken token) {
    return onStatus.apply(token);
  }

  @Override
  public T string(StringRedisToken token) {
    return onString.apply(token);
  }

  @Override
  public T error(ErrorRedisToken token) {
    return onError.apply(token);
  }

  @Override
  public T unknown(UnknownRedisToken token) {
    return onUnknown.apply(token);
  }

  @Override
  public T integer(IntegerRedisToken token) {
    return onInteger.apply(token);
  }

  public static class Builder {
    private Function onArray;
    private Function onStatus;
    private Function onString;
    private Function onError;
    private Function onInteger;
    private Function onUnknown;

    public Builder onArray(Function onArray) {
      this.onArray = onArray;
      return this;
    }

    public Builder onStatus(Function onStatus) {
      this.onStatus = onStatus;
      return this;
    }

    public Builder onString(Function onString) {
      this.onString = onString;
      return this;
    }

    public Builder onError(Function onError) {
      this.onError = onError;
      return this;
    }

    public Builder onInteger(Function onInteger) {
      this.onInteger = onInteger;
      return this;
    }

    public Builder onUnknown(Function onUnknown) {
      this.onUnknown = onUnknown;
      return this;
    }

    public RedisTokenVisitor build() {
      return new LambdaRedisTokenVisitor<>(safe(onArray), safe(onStatus), safe(onString),
          safe(onError), safe(onInteger), safe(onUnknown));
    }

    private  Function safe(Function function) {
      return function != null ? function : x -> null;
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy