<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/cloud/auditmanager/v1/auditmanager.proto

namespace Google\Cloud\AuditManager\V1\Control;

use UnexpectedValueException;

/**
 * The family of the control. For example, Access Control.
 *
 * Protobuf type <code>google.cloud.auditmanager.v1.Control.Family</code>
 */
class Family
{
    /**
     * Unspecified. Invalid state.
     *
     * Generated from protobuf enum <code>FAMILY_UNSPECIFIED = 0;</code>
     */
    const FAMILY_UNSPECIFIED = 0;
    /**
     * Access Control
     *
     * Generated from protobuf enum <code>AC = 1;</code>
     */
    const AC = 1;
    /**
     * Awareness and Training
     *
     * Generated from protobuf enum <code>AT = 2;</code>
     */
    const AT = 2;
    /**
     * Audit and Accountability
     *
     * Generated from protobuf enum <code>AU = 3;</code>
     */
    const AU = 3;
    /**
     * Certification, Accreditation and Security Assessments
     *
     * Generated from protobuf enum <code>CA = 4;</code>
     */
    const CA = 4;
    /**
     * Configuration Management
     *
     * Generated from protobuf enum <code>CM = 5;</code>
     */
    const CM = 5;
    /**
     * Contingency Planning
     *
     * Generated from protobuf enum <code>CP = 6;</code>
     */
    const CP = 6;
    /**
     * Identification and Authentication
     *
     * Generated from protobuf enum <code>IA = 7;</code>
     */
    const IA = 7;
    /**
     * Incident Response
     *
     * Generated from protobuf enum <code>IR = 8;</code>
     */
    const IR = 8;
    /**
     * Maintenance
     *
     * Generated from protobuf enum <code>MA = 9;</code>
     */
    const MA = 9;
    /**
     * Media Protection
     *
     * Generated from protobuf enum <code>MP = 10;</code>
     */
    const MP = 10;
    /**
     * Physical and Environmental Protection
     *
     * Generated from protobuf enum <code>PE = 11;</code>
     */
    const PE = 11;
    /**
     * Security Planning
     *
     * Generated from protobuf enum <code>PL = 12;</code>
     */
    const PL = 12;
    /**
     * Personnel Security
     *
     * Generated from protobuf enum <code>PS = 13;</code>
     */
    const PS = 13;
    /**
     * Risk Assessment
     *
     * Generated from protobuf enum <code>RA = 14;</code>
     */
    const RA = 14;
    /**
     * System Services and Acquisition
     *
     * Generated from protobuf enum <code>SA = 15;</code>
     */
    const SA = 15;
    /**
     * System and Communications Protection
     *
     * Generated from protobuf enum <code>SC = 16;</code>
     */
    const SC = 16;
    /**
     * System and Information Integrity
     *
     * Generated from protobuf enum <code>SI = 17;</code>
     */
    const SI = 17;
    /**
     * Supply Chain Risk Management
     *
     * Generated from protobuf enum <code>SR = 18;</code>
     */
    const SR = 18;

    private static $valueToName = [
        self::FAMILY_UNSPECIFIED => 'FAMILY_UNSPECIFIED',
        self::AC => 'AC',
        self::AT => 'AT',
        self::AU => 'AU',
        self::CA => 'CA',
        self::CM => 'CM',
        self::CP => 'CP',
        self::IA => 'IA',
        self::IR => 'IR',
        self::MA => 'MA',
        self::MP => 'MP',
        self::PE => 'PE',
        self::PL => 'PL',
        self::PS => 'PS',
        self::RA => 'RA',
        self::SA => 'SA',
        self::SC => 'SC',
        self::SI => 'SI',
        self::SR => 'SR',
    ];

    public static function name($value)
    {
        if (!isset(self::$valueToName[$value])) {
            throw new UnexpectedValueException(sprintf(
                    'Enum %s has no name defined for value %s', __CLASS__, $value));
        }
        return self::$valueToName[$value];
    }


    public static function value($name)
    {
        $const = __CLASS__ . '::' . strtoupper($name);
        if (!defined($const)) {
            throw new UnexpectedValueException(sprintf(
                    'Enum %s has no value defined for name %s', __CLASS__, $name));
        }
        return constant($const);
    }
}

