--
-- Copyright © 2013-2015 Anchor Systems, Pty Ltd and Others
--
-- The code in this file, and the program it is a part of, is
-- made available to you by its authors as open source software:
-- you can redistribute it and/or modify it under the terms of
-- the 3-clause BSD licence.
--
-- /Description/
-- This module defines the Ceilometer IP type.
--
{-# LANGUAGE MultiWayIf #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
module Ceilometer.Types.IP
( -- * Fields
PFIPStatus(..), pfIPStatus
, PFIPVerb(..), pfIPVerb
, PFIPAlloc(..), pfIPAlloc
, PDIP(..), pdIP
, ipStatus, ipVerb, ipEndpoint, ipVal
) where
import Control.Applicative
import Control.Lens
import Data.Binary (Word32, Word8)
import Data.Text (Text)
import Ceilometer.Types.Base
import Ceilometer.Types.TH
import Vaultaire.Types
$(declarePF "IP"
("Status", ''Word8)
[ ("None" , 0)
, ("Active" , 1)
, ("Down" , 2) ]
[ ''Show, ''Read, ''Eq, ''Bounded, ''Enum ])
$(declarePF "IP"
("Verb", ''Word8)
[ ("Create" , 1)
, ("Update" , 2)
, ("Delete" , 3) ]
[ ''Show, ''Read, ''Eq, ''Bounded, ''Enum ])
$(declarePF "IP"
("Alloc", ''Word32)
[ ("Alloc", 1) ]
[ ''Show, ''Read, ''Eq, ''Bounded, ''Enum, ''Ord ])
data PDIP = PDIP
{ _ipStatus :: PFIPStatus
, _ipVerb :: PFIPVerb
, _ipEndpoint :: PFEndpoint
, _ipVal :: PFIPAlloc
}
deriving (Eq, Show, Read)
$(makeLenses ''PDIP)
pdIP :: Prism' PRCompoundEvent PDIP
pdIP = prism' pretty parse
where parse raw
= PDIP
<$> (raw ^? eventStatus . pfIPStatus)
<*> (raw ^? eventVerb . pfIPVerb)
<*> (raw ^? eventEndpoint . pfEndpoint)
<*> (raw ^? eventVal . pfIPAlloc)
pretty (PDIP status verb ep x)
= PRCompoundEvent
(x ^. re pfIPAlloc)
(ep ^. re pfEndpoint)
(verb ^. re pfIPVerb)
(status ^. re pfIPStatus)