<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# NO CHECKED-IN PROTOBUF GENCODE
# source: google/protobuf/descriptor.proto

namespace Google\Protobuf\Internal;

use UnexpectedValueException;

/**
 * Describes the 'visibility' of a symbol with respect to the proto import
 * system. Symbols can only be imported when the visibility rules do not prevent
 * it (ex: local symbols cannot be imported).  Visibility modifiers can only set
 * on `message` and `enum` as they are the only types available to be referenced
 * from other files.
 *
 * Protobuf type <code>google.protobuf.SymbolVisibility</code>
 */
class SymbolVisibility
{
    /**
     * Generated from protobuf enum <code>VISIBILITY_UNSET = 0;</code>
     */
    const VISIBILITY_UNSET = 0;
    /**
     * Generated from protobuf enum <code>VISIBILITY_LOCAL = 1;</code>
     */
    const VISIBILITY_LOCAL = 1;
    /**
     * Generated from protobuf enum <code>VISIBILITY_EXPORT = 2;</code>
     */
    const VISIBILITY_EXPORT = 2;

    private static $valueToName = [
        self::VISIBILITY_UNSET => 'VISIBILITY_UNSET',
        self::VISIBILITY_LOCAL => 'VISIBILITY_LOCAL',
        self::VISIBILITY_EXPORT => 'VISIBILITY_EXPORT',
    ];

    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);
    }
}

