module Pdf.Core.Types
(
Rectangle(..),
rectangleFromArray
)
where
import Pdf.Core
import Pdf.Core.Util
import Pdf.Core.Object.Util
import qualified Data.Vector as Vector
data Rectangle a = Rectangle a a a a
deriving Int -> Rectangle a -> ShowS
[Rectangle a] -> ShowS
Rectangle a -> String
(Int -> Rectangle a -> ShowS)
-> (Rectangle a -> String)
-> ([Rectangle a] -> ShowS)
-> Show (Rectangle a)
forall a. Show a => Int -> Rectangle a -> ShowS
forall a. Show a => [Rectangle a] -> ShowS
forall a. Show a => Rectangle a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Rectangle a] -> ShowS
$cshowList :: forall a. Show a => [Rectangle a] -> ShowS
show :: Rectangle a -> String
$cshow :: forall a. Show a => Rectangle a -> String
showsPrec :: Int -> Rectangle a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Rectangle a -> ShowS
Show
rectangleFromArray :: Array -> Either String (Rectangle Double)
rectangleFromArray :: Array -> Either String (Rectangle Double)
rectangleFromArray Array
arr = do
[Double]
res <- (Object -> Maybe Double) -> [Object] -> Maybe [Double]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM Object -> Maybe Double
realValue (Array -> [Object]
forall a. Vector a -> [a]
Vector.toList Array
arr)
Maybe [Double] -> String -> Either String [Double]
forall a. Maybe a -> String -> Either String a
`notice` String
"Rectangle should contain real values"
case [Double]
res of
[Double
a, Double
b, Double
c, Double
d] -> Rectangle Double -> Either String (Rectangle Double)
forall (m :: * -> *) a. Monad m => a -> m a
return (Rectangle Double -> Either String (Rectangle Double))
-> Rectangle Double -> Either String (Rectangle Double)
forall a b. (a -> b) -> a -> b
$ Double -> Double -> Double -> Double -> Rectangle Double
forall a. a -> a -> a -> a -> Rectangle a
Rectangle Double
a Double
b Double
c Double
d
[Double]
_ -> String -> Either String (Rectangle Double)
forall a b. a -> Either a b
Left (String
"rectangleFromArray: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Array -> String
forall a. Show a => a -> String
show Array
arr)