function Util.MakeSequenceType(M)M=M or{}assert(M.Parse~=nil or M.Constructor~=nil,"\077\097\107\101\083\101\113\117\101\110\099\101\084\121\112\101\058 \077\117\115\116 \112\114\111\118\105\100\101 \111\110\101 \111\102\058 \067\111\110\115\116\114\117\099\116\111\114\044 \080\097\114\115\101")M.TransformEach=M.TransformEach or function(...)return...end M.ValidateEach=M.ValidateEach or function()return true end return{Transform=function(L)return Util.Map(Util.SplitPrioritizedDelimeter(L,{"\044","\037\115"}),function(L)return M.TransformEach(L)end)end,Validate=function(L)if M.Length and#L>M.Length then return false,("\077\097\120\105\109\117\109 \111\102 \037\100 \118\097\108\117\101\115 \097\108\108\111\119\101\100 \105\110 \115\101\113\117\101\110\099\101"):format(M.Length)end for o=1,M.Length or#L,1 do local F,d=M.ValidateEach(L[o],o)if not F then return false,d end end return true end,Parse=M.Parse or function(L)return M.Constructor(unpack(L))end}end
--- Makes a type that contains a sequence, e.g. Vector3 or Color3
function Util.MakeSequenceType(options)
	options = options or {}

	assert(
		options.Parse ~= nil or options.Constructor ~= nil,
		"MakeSequenceType: Must provide one of: Constructor, Parse"
	)

	options.TransformEach = options.TransformEach or function(...)
		return ...
	end

	options.ValidateEach = options.ValidateEach or function()
		return true
	end

	return {
		Transform = function(text)
			return Util.Map(Util.SplitPrioritizedDelimeter(text, { ",", "%s" }), function(value)
				return options.TransformEach(value)
			end)
		end,

		Validate = function(components)
			if options.Length and #components > options.Length then
				return false, ("Maximum of %d values allowed in sequence"):format(options.Length)
			end

			for i = 1, options.Length or #components do
				local valid, reason = options.ValidateEach(components[i], i)

				if not valid then
					return false, reason
				end
			end

			return true
		end,

		Parse = options.Parse or function(components)
			return options.Constructor(unpack(components))
		end,
	}
end
