@@ -4,6 +4,7 @@
4{-# LANGUAGE DeriveDataTypeable #-}
4{-# LANGUAGE DeriveDataTypeable #-}
5{-# LANGUAGE TypeSynonymInstances #-}
5{-# LANGUAGE TypeSynonymInstances #-}
6{-# LANGUAGE CPP #-}
6{-# LANGUAGE CPP #-}
7+{-# LANGUAGE TemplateHaskell #-}
7module Data.Object.Yaml
8module Data.Object.Yaml
8 ( -- * 'YamlDoc' definition and IO
9 ( -- * 'YamlDoc' definition and IO
9 YamlDoc (..)
10 YamlDoc (..)
@@ -29,7 +30,7 @@ import Data.ByteString (ByteString)
29import qualified Data.ByteString as B
30import qualified Data.ByteString as B
30import Data.Object.Base
31import Data.Object.Base
31import Data.Object.Text
32import Data.Object.Text
32−import Data.Convertible.Text
33+import Data.Object.String
33import Data.Attempt
34import Data.Attempt
35import Data.Object.Yaml.Internal
36import Data.Object.Yaml.Internal
@@ -87,6 +88,20 @@ instance ConvertSuccess YamlScalar Text where
87instance ConvertSuccess Text YamlScalar where
88instance ConvertSuccess Text YamlScalar where
88 convertSuccess t = YamlScalar (convertSuccess t) NoTag Any
89 convertSuccess t = YamlScalar (convertSuccess t) NoTag Any
91+instance ConvertSuccess YamlScalar ByteString where
92+ convertSuccess = value
93+instance ConvertSuccess ByteString YamlScalar where
94+ convertSuccess t = YamlScalar t NoTag Any
97+ [ (''String, ''YamlScalar)
98+ , (''YamlScalar, ''String)
99+ , (''ByteString, ''YamlScalar)
100+ , (''YamlScalar, ''ByteString)
101+ , (''Text, ''YamlScalar)
102+ , (''YamlScalar, ''Text)
90-- FIXME add Scalar instances
105-- FIXME add Scalar instances
92instance ConvertSuccess YamlScalar Scalar where
107instance ConvertSuccess YamlScalar Scalar where
@@ -97,6 +112,13 @@ instance ConvertSuccess Scalar YamlScalar where
98type YamlObject = Object YamlScalar YamlScalar
113type YamlObject = Object YamlScalar YamlScalar
115+$(deriveSuccessConvs ''YamlScalar ''YamlScalar
119+$(deriveSuccessConvs ''String ''String [''YamlScalar] [''YamlScalar])
120+$(deriveSuccessConvs ''Text ''Text [''YamlScalar] [''YamlScalar])
100-- Emit a YamlObject to an event stream
122-- Emit a YamlObject to an event stream
101instance ConvertSuccess YamlObject [Event] where
123instance ConvertSuccess YamlObject [Event] where
102 convertSuccess o = EventStreamStart
124 convertSuccess o = EventStreamStart
@@ -171,15 +193,16 @@ eventsToYamlObject (EventStreamStart:EventDocumentStart:events) = h1 events
171 readMap (f . ((:) (key', val))) rest'
193 readMap (f . ((:) (key', val))) rest'
172eventsToYamlObject e = failure $ YamlInvalidEventStreamBeginning e
194eventsToYamlObject e = failure $ YamlInvalidEventStreamBeginning e
174−instance ConvertSuccess YamlObject TextObject where
175− convertSuccess = mapKeysValues cs cs
176−instance ConvertSuccess TextObject YamlObject where
177− convertSuccess = mapKeysValues cs cs
178instance ConvertSuccess TextObject YamlDoc where
196instance ConvertSuccess TextObject YamlDoc where
179 convertSuccess = cs . (cs :: TextObject -> YamlObject)
197 convertSuccess = cs . (cs :: TextObject -> YamlObject)
180instance ConvertAttempt YamlDoc TextObject where
198instance ConvertAttempt YamlDoc TextObject where
181 convertAttempt = fmap cs . (ca :: YamlDoc -> Attempt YamlObject)
199 convertAttempt = fmap cs . (ca :: YamlDoc -> Attempt YamlObject)
201+instance ConvertSuccess StringObject YamlDoc where
202+ convertSuccess = cs . (cs :: StringObject -> YamlObject)
203+instance ConvertAttempt YamlDoc StringObject where
204+ convertAttempt = fmap cs . (ca :: YamlDoc -> Attempt YamlObject)
184instance ConvertSuccess (Object YamlScalar YamlScalar) (Object String Scalar) where
207instance ConvertSuccess (Object YamlScalar YamlScalar) (Object String Scalar) where
185 convertSuccess = mapKeysValues convertSuccess convertSuccess
208 convertSuccess = mapKeysValues convertSuccess convertSuccess