/// <summary>
        /// Checks the signiture of a migration method.
        /// </summary>
        /// <param name="method"></param>
        /// <param name="jsonArgumentType">Can be null if you don't want to check the type. Otherwise it should be one of JObject or JArray</param>
        public VerificationResultEnum VerifyMigrationMethodSignature(MigrationMethod method, SimpleType jsonArgumentType)
        {
            if (method == null)
            {
                throw new ArgumentNullException(nameof(method));
            }

            if (!_CanAssign(method.Parameters[0].Type, JTokenType))
            {
                return(VerificationResultEnum.FirstArgumentMustBeAssignableToJToken);
            }

            if (method.Parameters.Count != 2)
            {
                return(VerificationResultEnum.ParameterCountDoesntMatch);
            }

            if (jsonArgumentType != null && !_CanAssign(jsonArgumentType, method.Parameters[0].Type))
            {
                return(VerificationResultEnum.FirstArgumentMustBeAssignableToReturnTypeOfPreviousMigrationMethod);
            }

            if (!_CanAssign(method.Parameters[1].Type, JsonSerializerType))
            {
                return(VerificationResultEnum.SecondArgumentMustBeAssignableToJsonSerializer);
            }

            if (!_CanAssign(method.ReturnType, JTokenType))
            {
                return(VerificationResultEnum.ReturnTypeMustBeAssignableToJToken);
            }

            return(VerificationResultEnum.Ok);
        }
 public VerificationResult(MigrationMethod method, VerificationResultEnum result, SimpleType expectedDataArgumentType)
 {
     _ExpectedDataArgumentType = expectedDataArgumentType;
     Method = method;
     Result = result;
 }