module Finance.OpenSymbology.Types (
    BloombergEntry (..)
  , BloombergId (..)
  , BloombergName (..)
  , BloombergSymbol (..)
  , PricingSource (..)
  ) where

import Data.Text (Text)
import Finance.OpenSymbology.PricingSourceAbbreviations
import Finance.OpenSymbology.PricingSourceCategories
import Finance.OpenSymbology.PricingSourceDescriptions

data BloombergId = BloombergId {bId :: Text} deriving (Eq,Ord,Show)

data BloombergName = BloombergName {bName :: Text} deriving (Eq,Ord,Show)

data BloombergSymbol = BloombergSymbol {bSymbol :: Text} deriving (Eq,Ord,Show)

data BloombergEntry =
  BloombergHeader |
  BloombergEntry {
    beName :: BloombergName,
    beSymbol :: BloombergSymbol,
    bePricingSource :: Maybe Abbreviation,
    beSecurityType :: Maybe Text,
    beMarketSector :: Text,
    beBloombergId :: BloombergId,
    beBloombergCompositeId :: BloombergId,
    beSourceId :: Maybe Text,
    beUniqueId :: Maybe Text } deriving (Show,Eq)

data PricingSource = PricingSource Category Abbreviation Description deriving (Ord,Eq,Show,Read)