module Tart.Format.V0
  ( version0Format
  )
where

import qualified Data.Binary as B
import qualified Data.Text as T

import Tart.Canvas
import Tart.Format.Types

data TartFileDataV0 =
    TartFileDataV0 { TartFileDataV0 -> CanvasData
tartFileDataV0CanvasData  :: CanvasData
                   }

version0Format :: TartFileFormat
version0Format :: TartFileFormat
version0Format =
    Get TartFileDataV0
-> (TartFileDataV0 -> IO (Either String TartFile))
-> TartFileFormat
forall a.
Get a -> (a -> IO (Either String TartFile)) -> TartFileFormat
BinaryFormatVersion Get TartFileDataV0
forall t. Binary t => Get t
B.get TartFileDataV0 -> IO (Either String TartFile)
tartFileFromDataV0

instance B.Binary TartFileDataV0 where
    put :: TartFileDataV0 -> Put
put TartFileDataV0
d =
        CanvasData -> Put
forall t. Binary t => t -> Put
B.put (CanvasData -> Put) -> CanvasData -> Put
forall a b. (a -> b) -> a -> b
$ TartFileDataV0 -> CanvasData
tartFileDataV0CanvasData TartFileDataV0
d
    get :: Get TartFileDataV0
get =
        CanvasData -> TartFileDataV0
TartFileDataV0 (CanvasData -> TartFileDataV0)
-> Get CanvasData -> Get TartFileDataV0
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get CanvasData
forall t. Binary t => Get t
B.get

tartFileFromDataV0 :: TartFileDataV0 -> IO (Either String TartFile)
tartFileFromDataV0 :: TartFileDataV0 -> IO (Either String TartFile)
tartFileFromDataV0 TartFileDataV0
d = do
    Either String Canvas
result <- CanvasData -> IO (Either String Canvas)
canvasFromData (TartFileDataV0 -> CanvasData
tartFileDataV0CanvasData TartFileDataV0
d)
    case Either String Canvas
result of
        Left String
s -> Either String TartFile -> IO (Either String TartFile)
forall (m :: * -> *) a. Monad m => a -> m a
return (Either String TartFile -> IO (Either String TartFile))
-> Either String TartFile -> IO (Either String TartFile)
forall a b. (a -> b) -> a -> b
$ String -> Either String TartFile
forall a b. a -> Either a b
Left String
s
        Right Canvas
c -> Either String TartFile -> IO (Either String TartFile)
forall (m :: * -> *) a. Monad m => a -> m a
return (Either String TartFile -> IO (Either String TartFile))
-> Either String TartFile -> IO (Either String TartFile)
forall a b. (a -> b) -> a -> b
$ TartFile -> Either String TartFile
forall a b. b -> Either a b
Right (TartFile -> Either String TartFile)
-> TartFile -> Either String TartFile
forall a b. (a -> b) -> a -> b
$ [Canvas] -> [Text] -> [Int] -> TartFile
TartFile [Canvas
c] [String -> Text
T.pack String
"default"] [Int
0]