module Data.FpML.V53.Generic
( module Data.FpML.V53.Generic
, module Data.FpML.V53.Shared
, module Data.FpML.V53.Asset
) where
import Text.XML.HaXml.Schema.Schema (SchemaType(..),SimpleType(..),Extension(..),Restricts(..))
import Text.XML.HaXml.Schema.Schema as Schema
import Text.XML.HaXml.OneOfN
import qualified Text.XML.HaXml.Schema.PrimitiveTypes as Xsd
import Data.FpML.V53.Shared
import Data.FpML.V53.Asset
elementGenericProduct :: XMLParser GenericProduct
elementGenericProduct = parseSchemaType "genericProduct"
elementToXMLGenericProduct :: GenericProduct -> [Content ()]
elementToXMLGenericProduct = schemaTypeToXML "genericProduct"
elementNonSchemaProduct :: XMLParser GenericProduct
elementNonSchemaProduct = parseSchemaType "nonSchemaProduct"
elementToXMLNonSchemaProduct :: GenericProduct -> [Content ()]
elementToXMLNonSchemaProduct = schemaTypeToXML "nonSchemaProduct"
data GenericProduct = GenericProduct
{ genericProduct_ID :: Maybe Xsd.ID
, genericProduct_primaryAssetClass :: Maybe AssetClass
, genericProduct_secondaryAssetClass :: [AssetClass]
, genericProduct_productType :: [ProductType]
, genericProduct_productId :: [ProductId]
, genericProduct_multiLeg :: Maybe Xsd.Boolean
, genericProduct_choice5 :: (Maybe (OneOf2 ((Maybe (PartyReference)),(Maybe (AccountReference)),(Maybe (PartyReference)),(Maybe (AccountReference))) [PartyReference]))
, genericProduct_premium :: Maybe SimplePayment
, genericProduct_effectiveDate :: Maybe AdjustableDate2
, genericProduct_expirationDate :: Maybe AdjustableDate2
, genericProduct_terminationDate :: Maybe AdjustableDate2
, genericProduct_underlyer :: [TradeUnderlyer2]
, genericProduct_notional :: [CashflowNotional]
, genericProduct_optionType :: Maybe OptionType
, genericProduct_settlementCurrency :: [IdentifiedCurrency]
}
deriving (Eq,Show)
instance SchemaType GenericProduct where
parseSchemaType s = do
(pos,e) <- posnElement [s]
a0 <- optional $ getAttribute "id" e pos
commit $ interior e $ return (GenericProduct a0)
`apply` optional (parseSchemaType "primaryAssetClass")
`apply` many (parseSchemaType "secondaryAssetClass")
`apply` many (parseSchemaType "productType")
`apply` many (parseSchemaType "productId")
`apply` optional (parseSchemaType "multiLeg")
`apply` optional (oneOf' [ ("Maybe PartyReference Maybe AccountReference Maybe PartyReference Maybe AccountReference", fmap OneOf2 (return (,,,) `apply` optional (parseSchemaType "buyerPartyReference")
`apply` optional (parseSchemaType "buyerAccountReference")
`apply` optional (parseSchemaType "sellerPartyReference")
`apply` optional (parseSchemaType "sellerAccountReference")))
, ("[PartyReference]", fmap TwoOf2 (between (Occurs (Just 1) (Just 2))
(parseSchemaType "counterpartyReference")))
])
`apply` optional (parseSchemaType "premium")
`apply` optional (parseSchemaType "effectiveDate")
`apply` optional (parseSchemaType "expirationDate")
`apply` optional (parseSchemaType "terminationDate")
`apply` many (parseSchemaType "underlyer")
`apply` many (parseSchemaType "notional")
`apply` optional (parseSchemaType "optionType")
`apply` many (parseSchemaType "settlementCurrency")
schemaTypeToXML s x@GenericProduct{} =
toXMLElement s [ maybe [] (toXMLAttribute "id") $ genericProduct_ID x
]
[ maybe [] (schemaTypeToXML "primaryAssetClass") $ genericProduct_primaryAssetClass x
, concatMap (schemaTypeToXML "secondaryAssetClass") $ genericProduct_secondaryAssetClass x
, concatMap (schemaTypeToXML "productType") $ genericProduct_productType x
, concatMap (schemaTypeToXML "productId") $ genericProduct_productId x
, maybe [] (schemaTypeToXML "multiLeg") $ genericProduct_multiLeg x
, maybe [] (foldOneOf2 (\ (a,b,c,d) -> concat [ maybe [] (schemaTypeToXML "buyerPartyReference") a
, maybe [] (schemaTypeToXML "buyerAccountReference") b
, maybe [] (schemaTypeToXML "sellerPartyReference") c
, maybe [] (schemaTypeToXML "sellerAccountReference") d
])
(concatMap (schemaTypeToXML "counterpartyReference"))
) $ genericProduct_choice5 x
, maybe [] (schemaTypeToXML "premium") $ genericProduct_premium x
, maybe [] (schemaTypeToXML "effectiveDate") $ genericProduct_effectiveDate x
, maybe [] (schemaTypeToXML "expirationDate") $ genericProduct_expirationDate x
, maybe [] (schemaTypeToXML "terminationDate") $ genericProduct_terminationDate x
, concatMap (schemaTypeToXML "underlyer") $ genericProduct_underlyer x
, concatMap (schemaTypeToXML "notional") $ genericProduct_notional x
, maybe [] (schemaTypeToXML "optionType") $ genericProduct_optionType x
, concatMap (schemaTypeToXML "settlementCurrency") $ genericProduct_settlementCurrency x
]
instance Extension GenericProduct Product where
supertype v = Product_GenericProduct v
data TradeUnderlyer2 = TradeUnderlyer2
{ tradeUnderl_ID :: Maybe Xsd.ID
, tradeUnderl_choice0 :: (Maybe (OneOf5 FloatingRate Schedule Asset QuotedCurrencyPair LegalEntity))
, tradeUnderl_payerPartyReference :: Maybe PartyReference
, tradeUnderl_payerAccountReference :: Maybe AccountReference
, tradeUnderl_receiverPartyReference :: Maybe PartyReference
, tradeUnderl_receiverAccountReference :: Maybe AccountReference
}
deriving (Eq,Show)
instance SchemaType TradeUnderlyer2 where
parseSchemaType s = do
(pos,e) <- posnElement [s]
a0 <- optional $ getAttribute "id" e pos
commit $ interior e $ return (TradeUnderlyer2 a0)
`apply` optional (oneOf' [ ("FloatingRate", fmap OneOf5 (parseSchemaType "floatingRate"))
, ("Schedule", fmap TwoOf5 (parseSchemaType "fixedRate"))
, ("Asset", fmap ThreeOf5 (elementUnderlyingAsset))
, ("QuotedCurrencyPair", fmap FourOf5 (parseSchemaType "quotedCurrencyPair"))
, ("LegalEntity", fmap FiveOf5 (parseSchemaType "referenceEntity"))
])
`apply` optional (parseSchemaType "payerPartyReference")
`apply` optional (parseSchemaType "payerAccountReference")
`apply` optional (parseSchemaType "receiverPartyReference")
`apply` optional (parseSchemaType "receiverAccountReference")
schemaTypeToXML s x@TradeUnderlyer2{} =
toXMLElement s [ maybe [] (toXMLAttribute "id") $ tradeUnderl_ID x
]
[ maybe [] (foldOneOf5 (schemaTypeToXML "floatingRate")
(schemaTypeToXML "fixedRate")
(elementToXMLUnderlyingAsset)
(schemaTypeToXML "quotedCurrencyPair")
(schemaTypeToXML "referenceEntity")
) $ tradeUnderl_choice0 x
, maybe [] (schemaTypeToXML "payerPartyReference") $ tradeUnderl_payerPartyReference x
, maybe [] (schemaTypeToXML "payerAccountReference") $ tradeUnderl_payerAccountReference x
, maybe [] (schemaTypeToXML "receiverPartyReference") $ tradeUnderl_receiverPartyReference x
, maybe [] (schemaTypeToXML "receiverAccountReference") $ tradeUnderl_receiverAccountReference x
]
data OptionType = OptionType Scheme OptionTypeAttributes deriving (Eq,Show)
data OptionTypeAttributes = OptionTypeAttributes
{ optionTypeAttrib_optionTypeScheme :: Maybe Xsd.AnyURI
}
deriving (Eq,Show)
instance SchemaType OptionType where
parseSchemaType s = do
(pos,e) <- posnElement [s]
commit $ do
a0 <- optional $ getAttribute "optionTypeScheme" e pos
reparse [CElem e pos]
v <- parseSchemaType s
return $ OptionType v (OptionTypeAttributes a0)
schemaTypeToXML s (OptionType bt at) =
addXMLAttributes [ maybe [] (toXMLAttribute "optionTypeScheme") $ optionTypeAttrib_optionTypeScheme at
]
$ schemaTypeToXML s bt
instance Extension OptionType Scheme where
supertype (OptionType s _) = s