{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DefaultSignatures #-}
module Data.Aviation.Aip.ListItemLink(
ListItemLink(..)
, AsListItemLink(..)
, FoldListItemLink(..)
, GetListItemLink(..)
, SetListItemLink(..)
, ManyListItemLink(..)
, HasListItemLink(..)
, IsListItemLink(..)
) where
import Control.Category(id)
import Control.Applicative(pure, (<*>))
import Control.Lens hiding ((.=))
import Data.Aviation.Aip.Href(Href, SetHref, FoldHref(_FoldHref), ManyHref(_ManyHref), GetHref, HasHref(href))
import Data.Aviation.Aip.Txt(Txt)
import Data.Aeson(FromJSON(parseJSON), ToJSON(toJSON), withObject, object, (.:), (.=))
import Data.Eq(Eq)
import Data.Function(($))
import Data.Functor(fmap, (<$>))
import Data.Ord(Ord)
import Prelude(Show)
data ListItemLink =
ListItemLink
Href
Txt
deriving (Eq, Ord, Show)
instance FromJSON ListItemLink where
parseJSON =
withObject "ListItemLink" $ \v ->
ListItemLink <$>
v .: "href" <*>
v .: "txt"
instance ToJSON ListItemLink where
toJSON (ListItemLink u t) =
object ["href" .= u, "txt" .= t]
class ManyListItemLink a => AsListItemLink a where
_ListItemLink ::
Prism' a ListItemLink
default _ListItemLink ::
IsListItemLink a =>
Prism' a ListItemLink
_ListItemLink =
_IsListItemLink
instance AsListItemLink ListItemLink where
_ListItemLink =
id
class FoldListItemLink a where
_FoldListItemLink ::
Fold a ListItemLink
instance FoldListItemLink ListItemLink where
_FoldListItemLink =
id
class FoldListItemLink a => GetListItemLink a where
_GetListItemLink ::
Getter a ListItemLink
default _GetListItemLink ::
HasListItemLink a =>
Getter a ListItemLink
_GetListItemLink =
listItemLink
instance GetListItemLink ListItemLink where
_GetListItemLink =
id
class SetListItemLink a where
_SetListItemLink ::
Setter' a ListItemLink
default _SetListItemLink ::
ManyListItemLink a =>
Setter' a ListItemLink
_SetListItemLink =
_ManyListItemLink
instance SetListItemLink ListItemLink where
_SetListItemLink =
id
class (FoldListItemLink a, SetListItemLink a) => ManyListItemLink a where
_ManyListItemLink ::
Traversal' a ListItemLink
instance ManyListItemLink ListItemLink where
_ManyListItemLink =
id
class (GetListItemLink a, ManyListItemLink a) => HasListItemLink a where
listItemLink ::
Lens' a ListItemLink
default listItemLink ::
IsListItemLink a =>
Lens' a ListItemLink
listItemLink =
_IsListItemLink
instance HasListItemLink ListItemLink where
listItemLink =
id
class (HasListItemLink a, AsListItemLink a) => IsListItemLink a where
_IsListItemLink ::
Iso' a ListItemLink
instance IsListItemLink ListItemLink where
_IsListItemLink =
id
instance SetListItemLink () where
instance FoldListItemLink () where
_FoldListItemLink =
_ManyListItemLink
instance ManyListItemLink () where
_ManyListItemLink _ x =
pure x
instance SetHref ListItemLink where
instance FoldHref ListItemLink where
_FoldHref =
_ManyHref
instance ManyHref ListItemLink where
_ManyHref f (ListItemLink u x) =
ListItemLink <$> f u <*> pure x
instance GetHref ListItemLink where
instance HasHref ListItemLink where
href f (ListItemLink u x) =
fmap (\u' -> ListItemLink u' x) (f u)