packages feed

protobuf-simple-0.1.0.0: src/Parser/EnumDesc.hs

-- |
-- Module:      Parser.EnumDesc
-- Copyright:   (c) 2015-2016 Martijn Rijkeboer <mrr@sru-systems.com>
-- License:     MIT
-- Maintainer:  Martijn Rijkeboer <mrr@sru-systems.com>
--
-- Enum Descriptor type and functions.

module Parser.EnumDesc
    ( EnumDesc
    , new
    , getName
    , addValueDesc
    , addValueDescs
    , getValueDescs
    , getAllowAlias
    , setAllowAlias
    ) where


import Data.Foldable (toList)
import Data.Sequence ((|>), (><))
import Prelude (Maybe(..), (.))

import qualified Data.Sequence
import qualified Data.Sequence         as Seq
import qualified Parser.EnumValueDesc  as Parser
import qualified Prelude


data EnumDesc = EnumDesc
    { name       :: Prelude.String
    , valueDescs :: Data.Sequence.Seq Parser.EnumValueDesc
    , allowAlias :: Prelude.Maybe Prelude.Bool
    } deriving (Prelude.Show, Prelude.Eq)


type EnumName = Prelude.String


new :: EnumName -> EnumDesc
new n = EnumDesc n Seq.empty Nothing


getName :: EnumDesc -> EnumName
getName = name


addValueDesc :: Parser.EnumValueDesc -> EnumDesc -> EnumDesc
addValueDesc val self = self{valueDescs = valueDescs self |> val}


addValueDescs :: [Parser.EnumValueDesc] -> EnumDesc -> EnumDesc
addValueDescs vs self = self{valueDescs = valueDescs self >< Seq.fromList vs}


getValueDescs :: EnumDesc -> [Parser.EnumValueDesc]
getValueDescs = toList . valueDescs


getAllowAlias :: EnumDesc -> Maybe Prelude.Bool
getAllowAlias = allowAlias


setAllowAlias :: Prelude.Bool -> EnumDesc -> EnumDesc
setAllowAlias val self = self{allowAlias = Just val}