/**
 * Copyright 2018 The Feign Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
package reactivefeign.utils;

import static reactivefeign.utils.HttpUtils.StatusCodeFamily.*;

public class HttpUtils {

  public static StatusCodeFamily familyOf(final int statusCode) {
    switch (statusCode / 100) {
      case 1:
        return INFORMATIONAL;
      case 2:
        return SUCCESSFUL;
      case 3:
        return REDIRECTION;
      case 4:
        return CLIENT_ERROR;
      case 5:
        return SERVER_ERROR;
      default:
        return OTHER;
    }
  }

  public enum StatusCodeFamily {
    INFORMATIONAL(false), SUCCESSFUL(false), REDIRECTION(false), CLIENT_ERROR(true), SERVER_ERROR(
        true), OTHER(false);

    private final boolean error;

    StatusCodeFamily(boolean error) {
      this.error = error;
    }

    public boolean isError() {
      return error;
    }
  }
}
