module Cubix.Language.Solidity.ParsePretty where

import Data.Text.IO qualified as Text
import Solidity qualified
import Cubix.ParsePretty
import Cubix.Language.Solidity.IPS
import Cubix.Language.Solidity.Modularized qualified as Modularized

parseSolidity :: FilePath -> IO (Maybe (MSolidityTerm SolidityL))
parseSolidity :: FilePath -> IO (Maybe (MSolidityTerm SolidityL))
parseSolidity FilePath
path = do
  Text
contents <- FilePath -> IO Text
Text.readFile FilePath
path
  let res :: Either ParserError Solidity
res = FilePath -> Text -> Either ParserError Solidity
Solidity.parseFile FilePath
path Text
contents
  case Either ParserError Solidity
res of
    Left  ParserError
e -> ParserError -> IO ()
forall a. Show a => a -> IO ()
print ParserError
e IO ()
-> IO (Maybe (MSolidityTerm SolidityL))
-> IO (Maybe (MSolidityTerm SolidityL))
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Maybe (MSolidityTerm SolidityL)
-> IO (Maybe (MSolidityTerm SolidityL))
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe (MSolidityTerm SolidityL)
forall a. Maybe a
Nothing
    Right Solidity
s -> Maybe (MSolidityTerm SolidityL)
-> IO (Maybe (MSolidityTerm SolidityL))
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe (MSolidityTerm SolidityL)
 -> IO (Maybe (MSolidityTerm SolidityL)))
-> Maybe (MSolidityTerm SolidityL)
-> IO (Maybe (MSolidityTerm SolidityL))
forall a b. (a -> b) -> a -> b
$ MSolidityTerm SolidityL -> Maybe (MSolidityTerm SolidityL)
forall a. a -> Maybe a
Just (MSolidityTerm SolidityL -> Maybe (MSolidityTerm SolidityL))
-> MSolidityTerm SolidityL -> Maybe (MSolidityTerm SolidityL)
forall a b. (a -> b) -> a -> b
$ SolidityTerm SolidityL -> MSolidityTerm SolidityL
forall l. SolidityTerm l -> MSolidityTerm l
translate (SolidityTerm SolidityL -> MSolidityTerm SolidityL)
-> SolidityTerm SolidityL -> MSolidityTerm SolidityL
forall a b. (a -> b) -> a -> b
$ Solidity -> SolidityTerm SolidityL
Modularized.translate Solidity
s

type instance RootSort MSoliditySig = SolidityL
instance ParseFile MSoliditySig where parseFile :: FilePath -> IO (Maybe (Term MSoliditySig (RootSort MSoliditySig)))
parseFile = FilePath -> IO (Maybe (Term MSoliditySig (RootSort MSoliditySig)))
FilePath -> IO (Maybe (MSolidityTerm SolidityL))
parseSolidity

-- 2023.11.02: Initial Solidity library we're using has no pretty-printer.