summaryrefslogtreecommitdiff
path: root/source/Felix/Source/Content.hs
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