{-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE NoImplicitPrelude #-} -- | Exact validated source-byte identity within the current cache epoch. module Felix.Source.Content ( SourceContentId , sourceContentId , sourceContentIdBytes , sourceContentIdDigest , putSourceContentIdCache , getSourceContentIdCache ) where import Base import Felix.Cache.Codec import Felix.Source import Control.DeepSeq (NFData) import Data.ByteString (ByteString) newtype SourceContentId = SourceContentId CacheDigest deriving stock (Show, Eq, Ord, Generic) deriving newtype (Hashable, NFData) sourceContentId :: LoadedSource -> SourceContentId sourceContentId = sourceContentIdBytes . loadedBytes sourceContentIdBytes :: ByteString -> SourceContentId sourceContentIdBytes bytes = SourceContentId (hashCacheFields "felix-source-content-v1" [bytes]) sourceContentIdDigest :: SourceContentId -> CacheDigest sourceContentIdDigest (SourceContentId digest) = digest putSourceContentIdCache :: SourceContentId -> CachePut putSourceContentIdCache (SourceContentId digest) = putCacheDigest digest getSourceContentIdCache :: CacheGet SourceContentId getSourceContentIdCache = SourceContentId <$> getCacheDigest