{-# LANGUAGE CPP #-}
{-# LANGUAGE UndecidableInstances #-}
#if !MIN_VERSION_base(4,18,0)
{-# OPTIONS_GHC -Wwarn #-}
#endif
module PathSize.Data.PathData
( PathData (..),
)
where
import Control.DeepSeq (NFData)
import Effects.FileSystem.OsPath (OsPath)
import GHC.Generics (Generic)
import Optics.Core (A_Lens, LabelOptic (labelOptic), lensVL)
data PathData = MkPathData
{
PathData -> OsPath
path :: !OsPath,
PathData -> Integer
size :: {-# UNPACK #-} !Integer,
PathData -> Integer
numFiles :: {-# UNPACK #-} !Integer,
PathData -> Integer
numDirectories :: {-# UNPACK #-} !Integer
}
deriving stock
(
PathData -> PathData -> Bool
(PathData -> PathData -> Bool)
-> (PathData -> PathData -> Bool) -> Eq PathData
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PathData -> PathData -> Bool
== :: PathData -> PathData -> Bool
$c/= :: PathData -> PathData -> Bool
/= :: PathData -> PathData -> Bool
Eq,
(forall x. PathData -> Rep PathData x)
-> (forall x. Rep PathData x -> PathData) -> Generic PathData
forall x. Rep PathData x -> PathData
forall x. PathData -> Rep PathData x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. PathData -> Rep PathData x
from :: forall x. PathData -> Rep PathData x
$cto :: forall x. Rep PathData x -> PathData
to :: forall x. Rep PathData x -> PathData
Generic,
Int -> PathData -> ShowS
[PathData] -> ShowS
PathData -> String
(Int -> PathData -> ShowS)
-> (PathData -> String) -> ([PathData] -> ShowS) -> Show PathData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PathData -> ShowS
showsPrec :: Int -> PathData -> ShowS
$cshow :: PathData -> String
show :: PathData -> String
$cshowList :: [PathData] -> ShowS
showList :: [PathData] -> ShowS
Show
)
deriving anyclass
(
PathData -> ()
(PathData -> ()) -> NFData PathData
forall a. (a -> ()) -> NFData a
$crnf :: PathData -> ()
rnf :: PathData -> ()
NFData
)
instance
(k ~ A_Lens, a ~ OsPath, b ~ OsPath) =>
LabelOptic "path" k PathData PathData a b
where
labelOptic :: Optic k NoIx PathData PathData a b
labelOptic = LensVL PathData PathData a b -> Lens PathData PathData a b
forall s t a b. LensVL s t a b -> Lens s t a b
lensVL (LensVL PathData PathData a b -> Lens PathData PathData a b)
-> LensVL PathData PathData a b -> Lens PathData PathData a b
forall a b. (a -> b) -> a -> b
$ \a -> f b
f (MkPathData OsPath
_path Integer
_size Integer
_numFiles Integer
_numDirectories) ->
(OsPath -> PathData) -> f OsPath -> f PathData
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\OsPath
path' -> OsPath -> Integer -> Integer -> Integer -> PathData
MkPathData OsPath
path' Integer
_size Integer
_numFiles Integer
_numDirectories) (a -> f b
f a
OsPath
_path)
{-# INLINE labelOptic #-}
instance
(k ~ A_Lens, a ~ Integer, b ~ Integer) =>
LabelOptic "size" k PathData PathData a b
where
labelOptic :: Optic k NoIx PathData PathData a b
labelOptic = LensVL PathData PathData a b -> Lens PathData PathData a b
forall s t a b. LensVL s t a b -> Lens s t a b
lensVL (LensVL PathData PathData a b -> Lens PathData PathData a b)
-> LensVL PathData PathData a b -> Lens PathData PathData a b
forall a b. (a -> b) -> a -> b
$ \a -> f b
f (MkPathData OsPath
_path Integer
_size Integer
_numFiles Integer
_numDirectories) ->
(Integer -> PathData) -> f Integer -> f PathData
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Integer
size' -> OsPath -> Integer -> Integer -> Integer -> PathData
MkPathData OsPath
_path Integer
size' Integer
_numFiles Integer
_numDirectories) (a -> f b
f a
Integer
_size)
{-# INLINE labelOptic #-}
instance
(k ~ A_Lens, a ~ Integer, b ~ Integer) =>
LabelOptic "numFiles" k PathData PathData a b
where
labelOptic :: Optic k NoIx PathData PathData a b
labelOptic = LensVL PathData PathData a b -> Lens PathData PathData a b
forall s t a b. LensVL s t a b -> Lens s t a b
lensVL (LensVL PathData PathData a b -> Lens PathData PathData a b)
-> LensVL PathData PathData a b -> Lens PathData PathData a b
forall a b. (a -> b) -> a -> b
$ \a -> f b
f (MkPathData OsPath
_path Integer
_size Integer
_numFiles Integer
_numDirectories) ->
(Integer -> PathData) -> f Integer -> f PathData
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Integer
numFiles' -> OsPath -> Integer -> Integer -> Integer -> PathData
MkPathData OsPath
_path Integer
_size Integer
numFiles' Integer
_numDirectories) (a -> f b
f a
Integer
_numFiles)
{-# INLINE labelOptic #-}
instance
(k ~ A_Lens, a ~ Integer, b ~ Integer) =>
LabelOptic "numDirectories" k PathData PathData a b
where
labelOptic :: Optic k NoIx PathData PathData a b
labelOptic = LensVL PathData PathData a b -> Lens PathData PathData a b
forall s t a b. LensVL s t a b -> Lens s t a b
lensVL (LensVL PathData PathData a b -> Lens PathData PathData a b)
-> LensVL PathData PathData a b -> Lens PathData PathData a b
forall a b. (a -> b) -> a -> b
$ \a -> f b
f (MkPathData OsPath
_path Integer
_size Integer
_numFiles Integer
_numDirectories) ->
(Integer -> PathData) -> f Integer -> f PathData
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (OsPath -> Integer -> Integer -> Integer -> PathData
MkPathData OsPath
_path Integer
_size Integer
_numFiles) (a -> f b
f a
Integer
_numDirectories)
{-# INLINE labelOptic #-}