001    // =================================================================================================
002    // Copyright 2011 Twitter, Inc.
003    // -------------------------------------------------------------------------------------------------
004    // Licensed under the Apache License, Version 2.0 (the "License");
005    // you may not use this work except in compliance with the License.
006    // You may obtain a copy of the License in the LICENSE file, or at:
007    //
008    //  http://www.apache.org/licenses/LICENSE-2.0
009    //
010    // Unless required by applicable law or agreed to in writing, software
011    // distributed under the License is distributed on an "AS IS" BASIS,
012    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013    // See the License for the specific language governing permissions and
014    // limitations under the License.
015    // =================================================================================================
016    
017    package com.twitter.common.args;
018    
019    import java.lang.annotation.Annotation;
020    
021    /**
022     * Typedef for a constraint verifier.
023     *
024     * @author William Farner
025     */
026    public interface Verifier<T> {
027    
028      /**
029       * Verifies the value against the annotation.
030       *
031       * @param value Value that is being applied.
032       * @param annotation Annotation that the verifier is checking against.
033       */
034      void verify(T value, Annotation annotation);
035    
036      /**
037       * Returns a representation of the constraint this verifier checks.
038       *
039       * @param argType The type of the {@link com.twitter.common.args.Arg} this annotation applies to.
040       * @param annotation The constraint annotation to represent.
041       * @return A representation of the constraint this verifier checks.
042       */
043      String toString(Class<T> argType, Annotation annotation);
044    }