summaryrefslogtreecommitdiffstats
path: root/src/MdBlocks/Address.hs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-09-30 04:54:07 +0200
committertv <tv@krebsco.de>2026-09-30 04:54:07 +0200
commit80efc38f395b9ee70545d586ef02c68cf952be8d (patch)
treeb737cdc13ea541d614c53d1528051db781f2b6e0 /src/MdBlocks/Address.hs
parent359ce0a3104d6407372e0dd3ba86bca71617b9a5 (diff)
implement --extract
Diffstat (limited to 'src/MdBlocks/Address.hs')
-rw-r--r--src/MdBlocks/Address.hs28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/MdBlocks/Address.hs b/src/MdBlocks/Address.hs
index c3dc5a4..8a32e0f 100644
--- a/src/MdBlocks/Address.hs
+++ b/src/MdBlocks/Address.hs
@@ -1,12 +1,38 @@
{-# LANGUAGE OverloadedStrings #-}
-module MdBlocks.Address where
+module MdBlocks.Address
+ ( Address(..)
+ , parseAddress
+ , addressOf
+ )
+where
import Data.Text (Text)
import qualified Data.Text as T
import MdBlocks.Types
+data Address
+ = GlobalId Text
+ | FileAddress FilePath Text
+ deriving (Show, Eq)
+
+parseAddress :: String -> Either String Address
+parseAddress input =
+ case T.breakOn "#" (T.pack input) of
+ (file, ident)
+ | T.null file ->
+ Left "address must contain a file path"
+
+ | T.null ident ->
+ Left "address must contain a block id after '#'"
+
+ | otherwise ->
+ Right
+ (FileAddress
+ (T.unpack file)
+ (T.drop 1 ident))
+
addressOf :: Block -> Text
addressOf b =
case mdId (blockMeta b) of