function Argument.Validate(V,f)if V.RawValue==nil or#V.RawValue==0 and V.Required==false then return true end if V.Required and(V.RawSegments[1]==nil or#V.RawSegments[1]==0)then return false,"\084\104\105\115 \097\114\103\117\109\101\110\116 \105\115 \114\101\113\117\105\114\101\100\046"end if V.Type.Validate or V.Type.ValidateOnce then for X=1,#V.TransformedValues,1 do if V.Type.Validate then local f,n=V.Type.Validate(V:GetTransformedValue(X))if not f then return f,n or"\073\110\118\097\108\105\100 \118\097\108\117\101"end end if f and V.Type.ValidateOnce then local f,n=V.Type.ValidateOnce(V:GetTransformedValue(X))if not f then return f,n 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.Required and (self.RawSegments[1] == nil or #self.RawSegments[1] == 0) then
		return false, "This argument is required."
	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
