{-# OPTIONS_GHC -Wall #-}
{-# LANGUAGE TemplateHaskell #-}

module Data.Aviation.Casr.Logbook.Meta.TrackLog(
  TrackLog(TrackLog)
, HasTrackLog(..)
, tracklogUriType
, tracklogsource'
, tracklogname'
) where

import Control.Category ( Category((.)) )
import Control.Lens ( _Just, makeClassy, Traversal' )
import Data.Aviation.Casr.Logbook.Meta.TrackLogType
    ( TrackLogType )
import Data.Eq(Eq)
import Data.Maybe(Maybe(..))
import Data.Ord(Ord)
import Data.String(String)
import Prelude(Show)

data TrackLog =
  TrackLog {
    TrackLog -> String
_trackloguri :: String
  , TrackLog -> TrackLogType
_tracklogtype :: TrackLogType
  , TrackLog -> Maybe String
_tracklogsource :: Maybe String
  , TrackLog -> Maybe String
_tracklogname :: Maybe String
  } deriving (TrackLog -> TrackLog -> Bool
(TrackLog -> TrackLog -> Bool)
-> (TrackLog -> TrackLog -> Bool) -> Eq TrackLog
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TrackLog -> TrackLog -> Bool
== :: TrackLog -> TrackLog -> Bool
$c/= :: TrackLog -> TrackLog -> Bool
/= :: TrackLog -> TrackLog -> Bool
Eq, Eq TrackLog
Eq TrackLog =>
(TrackLog -> TrackLog -> Ordering)
-> (TrackLog -> TrackLog -> Bool)
-> (TrackLog -> TrackLog -> Bool)
-> (TrackLog -> TrackLog -> Bool)
-> (TrackLog -> TrackLog -> Bool)
-> (TrackLog -> TrackLog -> TrackLog)
-> (TrackLog -> TrackLog -> TrackLog)
-> Ord TrackLog
TrackLog -> TrackLog -> Bool
TrackLog -> TrackLog -> Ordering
TrackLog -> TrackLog -> TrackLog
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: TrackLog -> TrackLog -> Ordering
compare :: TrackLog -> TrackLog -> Ordering
$c< :: TrackLog -> TrackLog -> Bool
< :: TrackLog -> TrackLog -> Bool
$c<= :: TrackLog -> TrackLog -> Bool
<= :: TrackLog -> TrackLog -> Bool
$c> :: TrackLog -> TrackLog -> Bool
> :: TrackLog -> TrackLog -> Bool
$c>= :: TrackLog -> TrackLog -> Bool
>= :: TrackLog -> TrackLog -> Bool
$cmax :: TrackLog -> TrackLog -> TrackLog
max :: TrackLog -> TrackLog -> TrackLog
$cmin :: TrackLog -> TrackLog -> TrackLog
min :: TrackLog -> TrackLog -> TrackLog
Ord, Int -> TrackLog -> ShowS
[TrackLog] -> ShowS
TrackLog -> String
(Int -> TrackLog -> ShowS)
-> (TrackLog -> String) -> ([TrackLog] -> ShowS) -> Show TrackLog
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TrackLog -> ShowS
showsPrec :: Int -> TrackLog -> ShowS
$cshow :: TrackLog -> String
show :: TrackLog -> String
$cshowList :: [TrackLog] -> ShowS
showList :: [TrackLog] -> ShowS
Show)

makeClassy ''TrackLog

tracklogUriType ::
  String
  -> TrackLogType
  -> TrackLog
tracklogUriType :: String -> TrackLogType -> TrackLog
tracklogUriType String
s TrackLogType
t =
  String -> TrackLogType -> Maybe String -> Maybe String -> TrackLog
TrackLog String
s TrackLogType
t Maybe String
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing

tracklogsource' ::
  HasTrackLog c =>
  Traversal' c String
tracklogsource' :: forall c. HasTrackLog c => Traversal' c String
tracklogsource' =
  (Maybe String -> f (Maybe String)) -> c -> f c
forall c. HasTrackLog c => Lens' c (Maybe String)
Lens' c (Maybe String)
tracklogsource ((Maybe String -> f (Maybe String)) -> c -> f c)
-> ((String -> f String) -> Maybe String -> f (Maybe String))
-> (String -> f String)
-> c
-> f c
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. (String -> f String) -> Maybe String -> f (Maybe String)
forall a b (p :: * -> * -> *) (f :: * -> *).
(Choice p, Applicative f) =>
p a (f b) -> p (Maybe a) (f (Maybe b))
_Just

tracklogname' ::
  HasTrackLog c =>
  Traversal' c String
tracklogname' :: forall c. HasTrackLog c => Traversal' c String
tracklogname' =
  (Maybe String -> f (Maybe String)) -> c -> f c
forall c. HasTrackLog c => Lens' c (Maybe String)
Lens' c (Maybe String)
tracklogname ((Maybe String -> f (Maybe String)) -> c -> f c)
-> ((String -> f String) -> Maybe String -> f (Maybe String))
-> (String -> f String)
-> c
-> f c
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. (String -> f String) -> Maybe String -> f (Maybe String)
forall a b (p :: * -> * -> *) (f :: * -> *).
(Choice p, Applicative f) =>
p a (f b) -> p (Maybe a) (f (Maybe b))
_Just