summaryrefslogtreecommitdiffstats
path: root/src/MdBlocks/Resolver.hs
blob: c6e94d1669ef6ba28a68486ccedeaee0a343fd0b (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
50
51
52
53
54
55
{-# LANGUAGE OverloadedStrings #-}

module MdBlocks.Resolver
  ( resolveBlock
  )
where

import Data.Text (Text)

import MdBlocks.Address
import MdBlocks.Types

resolveBlock
  :: Address
  -> [Block]
  -> Maybe Block

resolveBlock (GlobalId ident) blocks =
  findById ident blocks

resolveBlock (FileAddress fp ident) blocks =
  findByFileAndId fp ident blocks

findById :: Text -> [Block] -> Maybe Block
findById ident =
  go
  where
    go [] =
      Nothing

    go (b:bs)
      | mdId (blockMeta b) == Just ident =
          Just b

      | otherwise =
          go bs

findByFileAndId
  :: FilePath
  -> Text
  -> [Block]
  -> Maybe Block
findByFileAndId fp ident =
  go
  where
    go [] =
      Nothing

    go (b:bs)
      | blockFile b == fp
      , mdId (blockMeta b) == Just ident =
          Just b

      | otherwise =
          go bs