diff options
| -rw-r--r-- | erebos-tester.cabal | 1 | ||||
| -rw-r--r-- | src/Asset.hs | 30 | ||||
| -rw-r--r-- | src/Parser.hs | 17 | 
3 files changed, 47 insertions, 1 deletions
| diff --git a/erebos-tester.cabal b/erebos-tester.cabal index 7f25169..9d4e5ae 100644 --- a/erebos-tester.cabal +++ b/erebos-tester.cabal @@ -47,6 +47,7 @@ executable erebos-tester          Main.hs      other-modules: +        Asset          Config          GDB          Network diff --git a/src/Asset.hs b/src/Asset.hs new file mode 100644 index 0000000..550438b --- /dev/null +++ b/src/Asset.hs @@ -0,0 +1,30 @@ +module Asset ( +    Asset(..), +    AssetPath(..), +) where + +import Data.Text (Text) +import Data.Text qualified as T + +import Script.Expr.Class + +data Asset = Asset +    { assetPath :: AssetPath +    } + +newtype AssetPath = AssetPath FilePath + +textAssetPath :: AssetPath -> Text +textAssetPath (AssetPath path) = T.pack path + +instance ExprType Asset where +    textExprType _ = "asset" +    textExprValue asset = "asset:" <> textAssetPath (assetPath asset) + +    recordMembers = +        [ ( "path", RecordSelector $ assetPath ) +        ] + +instance ExprType AssetPath where +    textExprType _ = "filepath" +    textExprValue = ("filepath:" <>) . textAssetPath diff --git a/src/Parser.hs b/src/Parser.hs index 4bb32a7..4afca09 100644 --- a/src/Parser.hs +++ b/src/Parser.hs @@ -26,6 +26,7 @@ import System.Exit  import System.FilePath  import System.IO.Error +import Asset  import Network  import Parser.Core  import Parser.Expr @@ -98,12 +99,25 @@ parseDefinition = label "symbol definition" $ do                  replaceArgs (SomeExpr e) = SomeExpr (go unif e)              e -> e +parseAsset :: TestParser ( VarName, SomeExpr ) +parseAsset = label "asset definition" $ do +    wsymbol "asset" +    name <- varName +    osymbol ":" +    void eol +    ref <- L.indentGuard scn GT pos1 +    wsymbol "path" +    osymbol ":" +    assetPath <- AssetPath . TL.unpack <$> takeWhile1P Nothing (/= '\n') +    void $ L.indentGuard scn LT ref +    return ( name, SomeExpr $ Pure Asset {..} ) +  parseExport :: TestParser [ Toplevel ]  parseExport = label "export declaration" $ toplevel id $ do      wsymbol "export"      choice        [ do -        def@( name, _ ) <- parseDefinition +        def@( name, _ ) <- parseDefinition <|> parseAsset          return [ ToplevelDefinition def, ToplevelExport name ]        , do          names <- listOf varName @@ -139,6 +153,7 @@ parseTestModule absPath = do      toplevels <- fmap concat $ many $ choice          [ (: []) <$> parseTestDefinition          , (: []) <$> toplevel ToplevelDefinition parseDefinition +        , (: []) <$> toplevel ToplevelDefinition parseAsset          , parseExport          , parseImport          ] |