text: "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  const StructureKind_1 = require("../StructureKind");
  /* tslint:disable */
  /** Type guards for use on structures. */
  class StructureTypeGuards {
      constructor() {
      }
      /**
       * Gets if the provided structure has a name.
       */
      static hasName(structure) {
          return typeof structure.name === "string";
      }
      /**
       * Gets if the provided structure is a ClassDeclarationStructure.
       */
      static isClass(structure) {
          return structure.kind === StructureKind_1.StructureKind.Class;
      }
      /**
       * Gets if the provided structure is a ClassLikeDeclarationBaseStructure.
       */
      static isClassLikeDeclarationBase(structure) {
          return structure.kind === StructureKind_1.StructureKind.Class;
      }
      /**
       * Gets if the provided structure is a NameableNodeStructure.
       */
      static isNameable(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.Class:
              case StructureKind_1.StructureKind.Function:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a ImplementsClauseableNodeStructure.
       */
      static isImplementsClauseable(structure) {
          return structure.kind === StructureKind_1.StructureKind.Class;
      }
      /**
       * Gets if the provided structure is a DecoratableNodeStructure.
       */
      static isDecoratable(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.Class:
              case StructureKind_1.StructureKind.GetAccessor:
              case StructureKind_1.StructureKind.Method:
              case StructureKind_1.StructureKind.Property:
              case StructureKind_1.StructureKind.SetAccessor:
              case StructureKind_1.StructureKind.Parameter:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a TypeParameteredNodeStructure.
       */
      static isTypeParametered(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.Class:
              case StructureKind_1.StructureKind.Constructor:
              case StructureKind_1.StructureKind.ConstructorOverload:
              case StructureKind_1.StructureKind.GetAccessor:
              case StructureKind_1.StructureKind.Method:
              case StructureKind_1.StructureKind.MethodOverload:
              case StructureKind_1.StructureKind.SetAccessor:
              case StructureKind_1.StructureKind.Function:
              case StructureKind_1.StructureKind.FunctionOverload:
              case StructureKind_1.StructureKind.CallSignature:
              case StructureKind_1.StructureKind.ConstructSignature:
              case StructureKind_1.StructureKind.Interface:
              case StructureKind_1.StructureKind.MethodSignature:
              case StructureKind_1.StructureKind.TypeAlias:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a JSDocableNodeStructure.
       */
      static isJSDocable(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.Class:
              case StructureKind_1.StructureKind.Constructor:
              case StructureKind_1.StructureKind.ConstructorOverload:
              case StructureKind_1.StructureKind.GetAccessor:
              case StructureKind_1.StructureKind.Method:
              case StructureKind_1.StructureKind.MethodOverload:
              case StructureKind_1.StructureKind.Property:
              case StructureKind_1.StructureKind.SetAccessor:
              case StructureKind_1.StructureKind.Enum:
              case StructureKind_1.StructureKind.EnumMember:
              case StructureKind_1.StructureKind.Function:
              case StructureKind_1.StructureKind.FunctionOverload:
              case StructureKind_1.StructureKind.CallSignature:
              case StructureKind_1.StructureKind.ConstructSignature:
              case StructureKind_1.StructureKind.IndexSignature:
              case StructureKind_1.StructureKind.Interface:
              case StructureKind_1.StructureKind.MethodSignature:
              case StructureKind_1.StructureKind.PropertySignature:
              case StructureKind_1.StructureKind.Namespace:
              case StructureKind_1.StructureKind.VariableStatement:
              case StructureKind_1.StructureKind.TypeAlias:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a AbstractableNodeStructure.
       */
      static isAbstractable(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.Class:
              case StructureKind_1.StructureKind.GetAccessor:
              case StructureKind_1.StructureKind.Method:
              case StructureKind_1.StructureKind.MethodOverload:
              case StructureKind_1.StructureKind.Property:
              case StructureKind_1.StructureKind.SetAccessor:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a AmbientableNodeStructure.
       */
      static isAmbientable(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.Class:
              case StructureKind_1.StructureKind.Enum:
              case StructureKind_1.StructureKind.Function:
              case StructureKind_1.StructureKind.FunctionOverload:
              case StructureKind_1.StructureKind.Interface:
              case StructureKind_1.StructureKind.Namespace:
              case StructureKind_1.StructureKind.VariableStatement:
              case StructureKind_1.StructureKind.TypeAlias:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a ExportableNodeStructure.
       */
      static isExportable(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.Class:
              case StructureKind_1.StructureKind.Enum:
              case StructureKind_1.StructureKind.Function:
              case StructureKind_1.StructureKind.FunctionOverload:
              case StructureKind_1.StructureKind.Interface:
              case StructureKind_1.StructureKind.Namespace:
              case StructureKind_1.StructureKind.VariableStatement:
              case StructureKind_1.StructureKind.TypeAlias:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a ConstructorDeclarationStructure.
       */
      static isConstructor(structure) {
          return structure.kind === StructureKind_1.StructureKind.Constructor;
      }
      /**
       * Gets if the provided structure is a ScopedNodeStructure.
       */
      static isScoped(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.Constructor:
              case StructureKind_1.StructureKind.ConstructorOverload:
              case StructureKind_1.StructureKind.GetAccessor:
              case StructureKind_1.StructureKind.Method:
              case StructureKind_1.StructureKind.MethodOverload:
              case StructureKind_1.StructureKind.Property:
              case StructureKind_1.StructureKind.SetAccessor:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a FunctionLikeDeclarationStructure.
       */
      static isFunctionLike(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.Constructor:
              case StructureKind_1.StructureKind.GetAccessor:
              case StructureKind_1.StructureKind.Method:
              case StructureKind_1.StructureKind.SetAccessor:
              case StructureKind_1.StructureKind.Function:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a SignaturedDeclarationStructure.
       */
      static isSignatured(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.Constructor:
              case StructureKind_1.StructureKind.ConstructorOverload:
              case StructureKind_1.StructureKind.GetAccessor:
              case StructureKind_1.StructureKind.Method:
              case StructureKind_1.StructureKind.MethodOverload:
              case StructureKind_1.StructureKind.SetAccessor:
              case StructureKind_1.StructureKind.Function:
              case StructureKind_1.StructureKind.FunctionOverload:
              case StructureKind_1.StructureKind.CallSignature:
              case StructureKind_1.StructureKind.ConstructSignature:
              case StructureKind_1.StructureKind.MethodSignature:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a ParameteredNodeStructure.
       */
      static isParametered(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.Constructor:
              case StructureKind_1.StructureKind.ConstructorOverload:
              case StructureKind_1.StructureKind.GetAccessor:
              case StructureKind_1.StructureKind.Method:
              case StructureKind_1.StructureKind.MethodOverload:
              case StructureKind_1.StructureKind.SetAccessor:
              case StructureKind_1.StructureKind.Function:
              case StructureKind_1.StructureKind.FunctionOverload:
              case StructureKind_1.StructureKind.CallSignature:
              case StructureKind_1.StructureKind.ConstructSignature:
              case StructureKind_1.StructureKind.MethodSignature:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a ReturnTypedNodeStructure.
       */
      static isReturnTyped(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.Constructor:
              case StructureKind_1.StructureKind.ConstructorOverload:
              case StructureKind_1.StructureKind.GetAccessor:
              case StructureKind_1.StructureKind.Method:
              case StructureKind_1.StructureKind.MethodOverload:
              case StructureKind_1.StructureKind.SetAccessor:
              case StructureKind_1.StructureKind.Function:
              case StructureKind_1.StructureKind.FunctionOverload:
              case StructureKind_1.StructureKind.CallSignature:
              case StructureKind_1.StructureKind.ConstructSignature:
              case StructureKind_1.StructureKind.IndexSignature:
              case StructureKind_1.StructureKind.MethodSignature:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a StatementedNodeStructure.
       */
      static isStatemented(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.Constructor:
              case StructureKind_1.StructureKind.GetAccessor:
              case StructureKind_1.StructureKind.Method:
              case StructureKind_1.StructureKind.SetAccessor:
              case StructureKind_1.StructureKind.Function:
              case StructureKind_1.StructureKind.Namespace:
              case StructureKind_1.StructureKind.SourceFile:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a ConstructorDeclarationOverloadStructure.
       */
      static isConstructorDeclarationOverload(structure) {
          return structure.kind === StructureKind_1.StructureKind.ConstructorOverload;
      }
      /**
       * Gets if the provided structure is a GetAccessorDeclarationStructure.
       */
      static isGetAccessor(structure) {
          return structure.kind === StructureKind_1.StructureKind.GetAccessor;
      }
      /**
       * Gets if the provided structure is a PropertyNamedNodeStructure.
       */
      static isPropertyNamed(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.GetAccessor:
              case StructureKind_1.StructureKind.Method:
              case StructureKind_1.StructureKind.Property:
              case StructureKind_1.StructureKind.SetAccessor:
              case StructureKind_1.StructureKind.EnumMember:
              case StructureKind_1.StructureKind.MethodSignature:
              case StructureKind_1.StructureKind.PropertySignature:
              case StructureKind_1.StructureKind.PropertyAssignment:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a StaticableNodeStructure.
       */
      static isStaticable(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.GetAccessor:
              case StructureKind_1.StructureKind.Method:
              case StructureKind_1.StructureKind.MethodOverload:
              case StructureKind_1.StructureKind.Property:
              case StructureKind_1.StructureKind.SetAccessor:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a MethodDeclarationStructure.
       */
      static isMethod(structure) {
          return structure.kind === StructureKind_1.StructureKind.Method;
      }
      /**
       * Gets if the provided structure is a AsyncableNodeStructure.
       */
      static isAsyncable(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.Method:
              case StructureKind_1.StructureKind.MethodOverload:
              case StructureKind_1.StructureKind.Function:
              case StructureKind_1.StructureKind.FunctionOverload:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a GeneratorableNodeStructure.
       */
      static isGeneratorable(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.Method:
              case StructureKind_1.StructureKind.MethodOverload:
              case StructureKind_1.StructureKind.Function:
              case StructureKind_1.StructureKind.FunctionOverload:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a QuestionTokenableNodeStructure.
       */
      static isQuestionTokenable(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.Method:
              case StructureKind_1.StructureKind.MethodOverload:
              case StructureKind_1.StructureKind.Property:
              case StructureKind_1.StructureKind.Parameter:
              case StructureKind_1.StructureKind.MethodSignature:
              case StructureKind_1.StructureKind.PropertySignature:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a MethodDeclarationOverloadStructure.
       */
      static isMethodDeclarationOverload(structure) {
          return structure.kind === StructureKind_1.StructureKind.MethodOverload;
      }
      /**
       * Gets if the provided structure is a PropertyDeclarationStructure.
       */
      static isProperty(structure) {
          return structure.kind === StructureKind_1.StructureKind.Property;
      }
      /**
       * Gets if the provided structure is a TypedNodeStructure.
       */
      static isTyped(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.Property:
              case StructureKind_1.StructureKind.Parameter:
              case StructureKind_1.StructureKind.PropertySignature:
              case StructureKind_1.StructureKind.VariableDeclaration:
              case StructureKind_1.StructureKind.TypeAlias:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a ExclamationTokenableNodeStructure.
       */
      static isExclamationTokenable(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.Property:
              case StructureKind_1.StructureKind.VariableDeclaration:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a ReadonlyableNodeStructure.
       */
      static isReadonlyable(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.Property:
              case StructureKind_1.StructureKind.Parameter:
              case StructureKind_1.StructureKind.IndexSignature:
              case StructureKind_1.StructureKind.PropertySignature:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a InitializerExpressionableNodeStructure.
       */
      static isInitializerExpressionable(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.Property:
              case StructureKind_1.StructureKind.EnumMember:
              case StructureKind_1.StructureKind.Parameter:
              case StructureKind_1.StructureKind.PropertySignature:
              case StructureKind_1.StructureKind.VariableDeclaration:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a SetAccessorDeclarationStructure.
       */
      static isSetAccessor(structure) {
          return structure.kind === StructureKind_1.StructureKind.SetAccessor;
      }
      /**
       * Gets if the provided structure is a DecoratorStructure.
       */
      static isDecorator(structure) {
          return structure.kind === StructureKind_1.StructureKind.Decorator;
      }
      /**
       * Gets if the provided structure is a JSDocStructure.
       */
      static isJSDoc(structure) {
          return structure.kind === StructureKind_1.StructureKind.JSDoc;
      }
      /**
       * Gets if the provided structure is a EnumDeclarationStructure.
       */
      static isEnum(structure) {
          return structure.kind === StructureKind_1.StructureKind.Enum;
      }
      /**
       * Gets if the provided structure is a NamedNodeStructure.
       */
      static isNamed(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.Enum:
              case StructureKind_1.StructureKind.Interface:
              case StructureKind_1.StructureKind.JsxAttribute:
              case StructureKind_1.StructureKind.Namespace:
              case StructureKind_1.StructureKind.TypeAlias:
              case StructureKind_1.StructureKind.TypeParameter:
              case StructureKind_1.StructureKind.ShorthandPropertyAssignment:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a EnumMemberStructure.
       */
      static isEnumMember(structure) {
          return structure.kind === StructureKind_1.StructureKind.EnumMember;
      }
      /**
       * Gets if the provided structure is a FunctionDeclarationStructure.
       */
      static isFunction(structure) {
          return structure.kind === StructureKind_1.StructureKind.Function;
      }
      /**
       * Gets if the provided structure is a FunctionDeclarationOverloadStructure.
       */
      static isFunctionDeclarationOverload(structure) {
          return structure.kind === StructureKind_1.StructureKind.FunctionOverload;
      }
      /**
       * Gets if the provided structure is a ParameterDeclarationStructure.
       */
      static isParameter(structure) {
          return structure.kind === StructureKind_1.StructureKind.Parameter;
      }
      /**
       * Gets if the provided structure is a BindingNamedNodeStructure.
       */
      static isBindingNamed(structure) {
          switch (structure.kind) {
              case StructureKind_1.StructureKind.Parameter:
              case StructureKind_1.StructureKind.VariableDeclaration:
                  return true;
              default:
                  return false;
          }
      }
      /**
       * Gets if the provided structure is a ScopeableNodeStructure.
       */
      static isScopeable(structure) {
          return structure.kind === StructureKind_1.StructureKind.Parameter;
      }
      /**
       * Gets if the provided structure is a CallSignatureDeclarationStructure.
       */
      static isCallSignature(structure) {
          return structure.kind === StructureKind_1.StructureKind.CallSignature;
      }
      /**
       * Gets if the provided structure is a ConstructSignatureDeclarationStructure.
       */
      static isConstructSignature(structure) {
          return structure.kind === StructureKind_1.StructureKind.ConstructSignature;
      }
      /**
       * Gets if the provided structure is a IndexSignatureDeclarationStructure.
       */
      static isIndexSignature(structure) {
          return structure.kind === StructureKind_1.StructureKind.IndexSignature;
      }
      /**
       * Gets if the provided structure is a InterfaceDeclarationStructure.
       */
      static isInterface(structure) {
          return structure.kind === StructureKind_1.StructureKind.Interface;
      }
      /**
       * Gets if the provided structure is a ExtendsClauseableNodeStructure.
       */
      static isExtendsClauseable(structure) {
          return structure.kind === StructureKind_1.StructureKind.Interface;
      }
      /**
       * Gets if the provided structure is a TypeElementMemberedNodeStructure.
       */
      static isTypeElementMembered(structure) {
          return structure.kind === StructureKind_1.StructureKind.Interface;
      }
      /**
       * Gets if the provided structure is a MethodSignatureStructure.
       */
      static isMethodSignature(structure) {
          return structure.kind === StructureKind_1.StructureKind.MethodSignature;
      }
      /**
       * Gets if the provided structure is a PropertySignatureStructure.
       */
      static isPropertySignature(structure) {
          return structure.kind === StructureKind_1.StructureKind.PropertySignature;
      }
      /**
       * Gets if the provided structure is a JsxAttributeStructure.
       */
      static isJsxAttribute(structure) {
          return structure.kind === StructureKind_1.StructureKind.JsxAttribute;
      }
      /**
       * Gets if the provided structure is a JsxElementStructure.
       */
      static isJsxElement(structure) {
          return structure.kind === StructureKind_1.StructureKind.JsxElement;
      }
      /**
       * Gets if the provided structure is a JsxSelfClosingElementStructure.
       */
      static isJsxSelfClosingElement(structure) {
          return structure.kind === StructureKind_1.StructureKind.JsxSelfClosingElement;
      }
      /**
       * Gets if the provided structure is a JsxTagNamedNodeStructure.
       */
      static isJsxTagNamed(structure) {
          return structure.kind === StructureKind_1.StructureKind.JsxSelfClosingElement;
      }
      /**
       * Gets if the provided structure is a JsxAttributedNodeStructure.
       */
      static isJsxAttributed(structure) {
          return structure.kind === StructureKind_1.StructureKind.JsxSelfClosingElement;
      }
      /**
       * Gets if the provided structure is a JsxSpreadAttributeStructure.
       */
      static isJsxSpreadAttribute(structure) {
          return structure.kind === StructureKind_1.StructureKind.JsxSpreadAttribute;
      }
      /**
       * Gets if the provided structure is a ExportAssignmentStructure.
       */
      static isExportAssignment(structure) {
          return structure.kind === StructureKind_1.StructureKind.ExportAssignment;
      }
      /**
       * Gets if the provided structure is a ExportDeclarationStructure.
       */
      static isExportDeclaration(structure) {
          return structure.kind === StructureKind_1.StructureKind.ExportDeclaration;
      }
      /**
       * Gets if the provided structure is a ExportSpecifierStructure.
       */
      static isExportSpecifier(structure) {
          return structure.kind === StructureKind_1.StructureKind.ExportSpecifier;
      }
      /**
       * Gets if the provided structure is a ImportDeclarationStructure.
       */
      static isImportDeclaration(structure) {
          return structure.kind === StructureKind_1.StructureKind.ImportDeclaration;
      }
      /**
       * Gets if the provided structure is a ImportSpecifierStructure.
       */
      static isImportSpecifier(structure) {
          return structure.kind === StructureKind_1.StructureKind.ImportSpecifier;
      }
      /**
       * Gets if the provided structure is a NamespaceDeclarationStructure.
       */
      static isNamespace(structure) {
          return structure.kind === StructureKind_1.StructureKind.Namespace;
      }
      /**
       * Gets if the provided structure is a SourceFileStructure.
       */
      static isSourceFile(structure) {
          return structure.kind === StructureKind_1.StructureKind.SourceFile;
      }
      /**
       * Gets if the provided structure is a VariableDeclarationStructure.
       */
      static isVariableDeclaration(structure) {
          return structure.kind === StructureKind_1.StructureKind.VariableDeclaration;
      }
      /**
       * Gets if the provided structure is a VariableStatementStructure.
       */
      static isVariableStatement(structure) {
          return structure.kind === StructureKind_1.StructureKind.VariableStatement;
      }
      /**
       * Gets if the provided structure is a TypeAliasDeclarationStructure.
       */
      static isTypeAlias(structure) {
          return structure.kind === StructureKind_1.StructureKind.TypeAlias;
      }
      /**
       * Gets if the provided structure is a TypeParameterDeclarationStructure.
       */
      static isTypeParameter(structure) {
          return structure.kind === StructureKind_1.StructureKind.TypeParameter;
      }
      /**
       * Gets if the provided structure is a PropertyAssignmentStructure.
       */
      static isPropertyAssignment(structure) {
          return structure.kind === StructureKind_1.StructureKind.PropertyAssignment;
      }
      /**
       * Gets if the provided structure is a ShorthandPropertyAssignmentStructure.
       */
      static isShorthandPropertyAssignment(structure) {
          return structure.kind === StructureKind_1.StructureKind.ShorthandPropertyAssignment;
      }
      /**
       * Gets if the provided structure is a SpreadAssignmentStructure.
       */
      static isSpreadAssignment(structure) {
          return structure.kind === StructureKind_1.StructureKind.SpreadAssignment;
      }
      /**
       * Gets if the provided structure is a ExpressionedNodeStructure.
       */
      static isExpressioned(structure) {
          return structure.kind === StructureKind_1.StructureKind.SpreadAssignment;
      }
  }
  exports.StructureTypeGuards = StructureTypeGuards;
  