function DataStore.Debug(N,...)if N.debug then end end function DataStore._GetRaw(N)if N.getRawPromise then return N.getRawPromise end N.getRawPromise=((N.savingMethod:Get()):andThen(function(C)N.value=C N:Debug("\118\097\108\117\101 \114\101\099\101\105\118\101\100")N.haveValue=true N.getting=false end)):catch(function(C)N.getting=false N.getRawPromise=nil return Promise.reject(C)end)return N.getRawPromise end function DataStore._Update(C,N)if not N then for N,D in ipairs(C.callbacks)do D(C.value,C)end end C.haveValue=true C.valueUpdated=true end
--Internal functions
function DataStore:Debug(...)
	if self.debug then
		--print("[DataStore2.Debug]", ...)
	end
end

function DataStore:_GetRaw()
	if self.getRawPromise then
		return self.getRawPromise
	end

	self.getRawPromise = self.savingMethod
		:Get()
		:andThen(function(value)
			self.value = value
			self:Debug("value received")
			self.haveValue = true
			self.getting = false
		end)
		:catch(function(reason)
			self.getting = false
			self.getRawPromise = nil
			return Promise.reject(reason)
		end)

	return self.getRawPromise
end

function DataStore:_Update(dontCallOnUpdate)
	if not dontCallOnUpdate then
		for _, callback in ipairs(self.callbacks) do
			callback(self.value, self)
		end
	end

	self.haveValue = true
	self.valueUpdated = true
end
