blob: 400b7224a0171e59aeb9966dfb44aec4148b3433 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
{-# 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
|