function Argument.Validate(C,F)if C.RawValue==nil or#C.RawValue==0 and C.Required==false then return true end if C.Type.Validate or C.Type.ValidateOnce then for R=1,#C.TransformedValues,1 do if C.Type.Validate then local F,I=C.Type.Validate(C:GetTransformedValue(R))if not F then return F,I or"\073\110\118\097\108\105\100 \118\097\108\117\101"end end if F and C.Type.ValidateOnce then local F,I=C.Type.ValidateOnce(C:GetTransformedValue(R))if not F then return F,I end end end return true else return true end end
--- Validates that the argument will work without any type errors.
function Argument:Validate(isFinal)
	if self.RawValue == nil or #self.RawValue == 0 and self.Required == false then
		return true
	end

	if self.Type.Validate or self.Type.ValidateOnce then
		for i = 1, #self.TransformedValues do
			if self.Type.Validate then
				local valid, errorText = self.Type.Validate(self:GetTransformedValue(i))

				if not valid then
					return valid, errorText or "Invalid value"
				end
			end

			if isFinal and self.Type.ValidateOnce then
				local validOnce, errorTextOnce = self.Type.ValidateOnce(self:GetTransformedValue(i))

				if not validOnce then
					return validOnce, errorTextOnce
				end
			end
		end

		return true
	else
		return true
	end
end
