module Rakka.Attachment ( Attachment(..) ) where import Control.Arrow import Control.Arrow.ArrowList import System.IO.Unsafe import Text.XML.HXT.Arrow.ReadDocument import Text.XML.HXT.Arrow.WriteDocument import Text.XML.HXT.Arrow.XmlArrow import Text.XML.HXT.Arrow.XmlIOStateArrow import Text.XML.HXT.DOM.TypeDefs import Text.XML.HXT.DOM.XmlKeywords class Attachment t where serializeToXmlTree :: (ArrowChoice a, ArrowXml a) => a t XmlTree deserializeFromXmlTree :: (ArrowChoice a, ArrowXml a) => a XmlTree t serializeToString :: t -> String serializeToString attachment = unsafePerformIO $ do [xmlStr] <- runX ( setErrorMsgHandler False fail >>> constA attachment >>> serializeToXmlTree >>> writeDocumentToString [ (a_indent, v_1) ] ) return xmlStr deserializeFromString :: String -> t deserializeFromString source = unsafePerformIO $ do [ret] <- runX ( setErrorMsgHandler False fail >>> readString [ (a_validate , v_0) , (a_check_namespaces , v_1) , (a_remove_whitespace, v_0) ] source >>> deserializeFromXmlTree ) return ret