// Path: src/main/java/com/github/tonivade/resp/protocol/AbstractRedisToken.java
// public static final class ArrayRedisToken extends AbstractRedisToken<Sequence<RedisToken>> {
// 
//   ArrayRedisToken(Sequence<RedisToken> value) {
//     super(RedisTokenType.ARRAY, checkNonNull(value).asArray());
//   }
// 
//   @Override
//   public <T> T accept(RedisTokenVisitor<T> visitor) {
//     return visitor.array(this);
//   }
// 
//   public int size() {
//     return getValue().size();
//   }
// }
// 
// Path: src/main/java/com/github/tonivade/resp/protocol/AbstractRedisToken.java
// public static final class ErrorRedisToken extends AbstractRedisToken<String> {
// 
//   ErrorRedisToken(String value) {
//     super(RedisTokenType.ERROR, value);
//   }
// 
//   @Override
//   public <T> T accept(RedisTokenVisitor<T> visitor) {
//     return visitor.error(this);
//   }
// }
// 
// Path: src/main/java/com/github/tonivade/resp/protocol/AbstractRedisToken.java
// public static final class IntegerRedisToken extends AbstractRedisToken<Integer> {
// 
//   IntegerRedisToken(Integer value) {
//     super(RedisTokenType.INTEGER, value);
//   }
// 
//   @Override
//   public <T> T accept(RedisTokenVisitor<T> visitor) {
//     return visitor.integer(this);
//   }
// }
// 
// Path: src/main/java/com/github/tonivade/resp/protocol/AbstractRedisToken.java
// public static final class StatusRedisToken extends AbstractRedisToken<String> {
// 
//   StatusRedisToken(String value) {
//     super(RedisTokenType.STATUS, value);
//   }
// 
//   @Override
//   public <T> T accept(RedisTokenVisitor<T> visitor) {
//     return visitor.status(this);
//   }
// }
// 
// Path: src/main/java/com/github/tonivade/resp/protocol/AbstractRedisToken.java
// public static final class StringRedisToken extends AbstractRedisToken<SafeString> {
// 
//   StringRedisToken(SafeString value) {
//     super(RedisTokenType.STRING, value);
//   }
// 
//   @Override
//   public <T> T accept(RedisTokenVisitor<T> visitor) {
//     return visitor.string(this);
//   }
// }
// 
// Path: src/main/java/com/github/tonivade/resp/protocol/AbstractRedisToken.java
// public static final class UnknownRedisToken extends AbstractRedisToken<SafeString> {
// 
//   UnknownRedisToken(SafeString value) {
//     super(RedisTokenType.UNKNOWN, value);
//   }
// 
//   @Override
//   public <T> T accept(RedisTokenVisitor<T> visitor) {
//     return visitor.unknown(this);
//   }
// }


import static com.github.tonivade.purefun.Precondition.checkNonNull;
import static java.util.Objects.nonNull;
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;
/*
 * Copyright (c) 2016-2022, Antonio Gabriel Muñoz Conejo <antoniogmc at gmail dot com>
 * Distributed under the terms of the MIT License
 */
package com.github.tonivade.resp.protocol;




class LambdaRedisTokenVisitor<T> implements RedisTokenVisitor<T> {

  private Function<ArrayRedisToken, T> onArray;
  private Function<StatusRedisToken, T> onStatus;
  private Function<StringRedisToken, T> onString;
  private Function<ErrorRedisToken, T> onError;
  private Function<IntegerRedisToken, T> onInteger;
  private Function<UnknownRedisToken, T> onUnknown;

  LambdaRedisTokenVisitor(
      Function<ArrayRedisToken, T> onArray,
      Function<StatusRedisToken, T> onStatus,
      Function<StringRedisToken, T> onString,
      Function<ErrorRedisToken, T> onError,
      Function<IntegerRedisToken, T> onInteger,
      Function<UnknownRedisToken, T> onUnknown) {
    this.onArray = onArray;
    this.onStatus = onStatus;
    this.onString = onString;
// Path: src/main/java/com/github/tonivade/resp/protocol/AbstractRedisToken.java
// public static final class ArrayRedisToken extends AbstractRedisToken<Sequence<RedisToken>> {
// 
//   ArrayRedisToken(Sequence<RedisToken> value) {
//     super(RedisTokenType.ARRAY, checkNonNull(value).asArray());
//   }
// 
//   @Override
//   public <T> T accept(RedisTokenVisitor<T> visitor) {
//     return visitor.array(this);
//   }
// 
//   public int size() {
//     return getValue().size();
//   }
// }
// 
// Path: src/main/java/com/github/tonivade/resp/protocol/AbstractRedisToken.java
// public static final class ErrorRedisToken extends AbstractRedisToken<String> {
// 
//   ErrorRedisToken(String value) {
//     super(RedisTokenType.ERROR, value);
//   }
// 
//   @Override
//   public <T> T accept(RedisTokenVisitor<T> visitor) {
//     return visitor.error(this);
//   }
// }
// 
// Path: src/main/java/com/github/tonivade/resp/protocol/AbstractRedisToken.java
// public static final class IntegerRedisToken extends AbstractRedisToken<Integer> {
// 
//   IntegerRedisToken(Integer value) {
//     super(RedisTokenType.INTEGER, value);
//   }
// 
//   @Override
//   public <T> T accept(RedisTokenVisitor<T> visitor) {
//     return visitor.integer(this);
//   }
// }
// 
// Path: src/main/java/com/github/tonivade/resp/protocol/AbstractRedisToken.java
// public static final class StatusRedisToken extends AbstractRedisToken<String> {
// 
//   StatusRedisToken(String value) {
//     super(RedisTokenType.STATUS, value);
//   }
// 
//   @Override
//   public <T> T accept(RedisTokenVisitor<T> visitor) {
//     return visitor.status(this);
//   }
// }
// 
// Path: src/main/java/com/github/tonivade/resp/protocol/AbstractRedisToken.java
// public static final class StringRedisToken extends AbstractRedisToken<SafeString> {
// 
//   StringRedisToken(SafeString value) {
//     super(RedisTokenType.STRING, value);
//   }
// 
//   @Override
//   public <T> T accept(RedisTokenVisitor<T> visitor) {
//     return visitor.string(this);
//   }
// }
// 
// Path: src/main/java/com/github/tonivade/resp/protocol/AbstractRedisToken.java
// public static final class UnknownRedisToken extends AbstractRedisToken<SafeString> {
// 
//   UnknownRedisToken(SafeString value) {
//     super(RedisTokenType.UNKNOWN, value);
//   }
// 
//   @Override
//   public <T> T accept(RedisTokenVisitor<T> visitor) {
//     return visitor.unknown(this);
//   }
// }


// Path: src/main/java/com/github/tonivade/resp/protocol/LambdaRedisTokenVisitor.java
import static com.github.tonivade.purefun.Precondition.checkNonNull;
import static java.util.Objects.nonNull;
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;

/*
 * Copyright (c) 2016-2022, Antonio Gabriel Muñoz Conejo <antoniogmc at gmail dot com>
 * Distributed under the terms of the MIT License
 */
package com.github.tonivade.resp.protocol;




class LambdaRedisTokenVisitor<T> implements RedisTokenVisitor<T> {

  private Function<ArrayRedisToken, T> onArray;
  private Function<StatusRedisToken, T> onStatus;
  private Function<StringRedisToken, T> onString;
  private Function<ErrorRedisToken, T> onError;
  private Function<IntegerRedisToken, T> onInteger;
  private Function<UnknownRedisToken, T> onUnknown;

  LambdaRedisTokenVisitor(
      Function<ArrayRedisToken, T> onArray,
      Function<StatusRedisToken, T> onStatus,
      Function<StringRedisToken, T> onString,
      Function<ErrorRedisToken, T> onError,
      Function<IntegerRedisToken, T> onInteger,
      Function<UnknownRedisToken, T> onUnknown) {
    this.onArray = onArray;
    this.onStatus = onStatus;
    this.onString = onString;
    this.onError = onError;