

package com.amazonaws.services.s3.internal;


import com.amazonaws.annotation.SdkInternalApi;
import com.amazonaws.util.StringUtils;

/**
 * An enum representing the types of resources supported by S3 outpost. Each resource type below will have a
 * concrete implementation of {@link S3OutpostResource1}.
 */
@SdkInternalApi
public enum OutpostResourceType {

    /**
     * A specific S3 outpost bucket.
     */
    OUTPOST_BUCKET("bucket"),

    /**
     * An outpost access point
     */
    OUTPOST_ACCESS_POINT("accesspoint");

    private final String value;

    OutpostResourceType(String value) {
        this.value = value;
    }

    /**
     * @return The canonical string value of this resource type.
     */
    @Override
    public String toString() {
        return value;
    }

    /**
     * Use this in place of valueOf.
     *
     * @param value real value
     * @return S3ResourceType corresponding to the value
     * @throws IllegalArgumentException If the specified value does not map to one of the known values in this enum.
     */
    public static OutpostResourceType fromValue(String value) {
        if (StringUtils.isNullOrEmpty(value)) {
            throw new IllegalArgumentException("value cannot be null or empty!");
        }

        for (OutpostResourceType enumEntry : OutpostResourceType.values()) {
            if (enumEntry.toString().equals(value)) {
                return enumEntry;
            }
        }

        throw new IllegalArgumentException("Cannot create enum from " + value + " value!");
    }
}
