{-# LANGUAGE CPP #-}
-- | Hledger-related functions that use CPP macros for multiple
module Hledger.StockQuotes.Compat
    ( allJournalCommodities
    ) where

import Hledger (CommoditySymbol, Journal (..))

import qualified Data.Map.Strict as M

-- | Get all declared & inferred commodities of a Journal.
allJournalCommodities :: Journal -> [CommoditySymbol]
allJournalCommodities :: Journal -> [CommoditySymbol]
allJournalCommodities Journal
journal =
-- TODO: remove < 1.41 support after we drop GHC 9.8
#if MIN_VERSION_hledger_lib(1, 41, 0)
    Map CommoditySymbol Commodity -> [CommoditySymbol]
forall k a. Map k a -> [k]
M.keys (Journal -> Map CommoditySymbol Commodity
jdeclaredcommodities Journal
journal)
        [CommoditySymbol] -> [CommoditySymbol] -> [CommoditySymbol]
forall a. Semigroup a => a -> a -> a
<> Map CommoditySymbol AmountStyle -> [CommoditySymbol]
forall k a. Map k a -> [k]
M.keys (Journal -> Map CommoditySymbol AmountStyle
jinferredcommoditystyles Journal
journal)
#else
    M.keys (jcommodities journal)
        <> M.keys (jinferredcommodities journal)
#endif