/**************************************************************
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.
 *
 *************************************************************/


#ifndef __com_sun_star_script_FailReason_idl__
#define __com_sun_star_script_FailReason_idl__


//=============================================================================

 module com {  module sun {  module star {  module script {

//=============================================================================

/** These values specify the reason why a type conversion failed.
*/
published constants FailReason
{
	/** The given value does not fit in the range of the destination type.
    */
	const long OUT_OF_RANGE = 1;

	/** The given value cannot be converted to a number.
	*/
	const long IS_NOT_NUMBER = 2;

	/** The given value cannot be converted to an enumeration.
	*/
	const long IS_NOT_ENUM = 3;

	/** The given value cannot be converted to a boolean.
	*/
	const long IS_NOT_BOOL = 4;

	/** The given value is not an interface or cannot queried to the right interface.
	*/
	const long NO_SUCH_INTERFACE = 5;

	/** The given value cannot be converted to right structure or exception type.
	*/
	const long SOURCE_IS_NO_DERIVED_TYPE = 6;

	/** The type class of the given value is not supported.
	*/
	const long TYPE_NOT_SUPPORTED = 7;

	/** The given value cannot be converted and none of the other reasons match.
	*/
	const long INVALID = 8;

	/** This value is deprecated.  Do not use.
        @deprecated
	*/
	const long NO_DEFAULT_AVAILABLE = 9;

	/** This value is deprecated.  Do not use.
        @deprecated
    */
	const long UNKNOWN = 10;
};

//=============================================================================

}; }; }; };

/*=============================================================================

=============================================================================*/
#endif
