on master help sign in
Added preliminary scalar support
commit9c4fe543c619e7b9b8d49537e777a407c3e0114f authorMichael Snoyman <michael@snoyman.com> dateThu 10 Dec 2009, 02:38 (17 years ago) parent6b00934
2 files changed+55−1
Data/Object/Yaml.hs+19 Text/Yaml.hs+36−1
Data/Object/Yaml.hs+19
@@ -18,6 +18,7 @@ module Data.Object.Yaml
1818import Data.ByteString (ByteString)
1919import Data.Object
2020import Data.Object.Text
21+import Data.Object.Scalar
2122import Data.Convertible.Text
2223import Data.Attempt
2324
@@ -53,11 +54,24 @@ data Yaml = Yaml
5354 }
5455instance ConvertSuccess Yaml Event where
5556 convertSuccess (Yaml v t s) = EventScalar v (convertSuccess t) s
57+
58+instance ConvertSuccess Yaml [Char] where
59+ convertSuccess = convertSuccess . value
60+instance ConvertSuccess [Char] Yaml where
61+ convertSuccess t = Yaml (convertSuccess t) "" Any
62+
5663instance ConvertSuccess Yaml Text where
5764 convertSuccess = convertSuccess . value
5865instance ConvertSuccess Text Yaml where
5966 convertSuccess t = Yaml (convertSuccess t) "" Any
6067
68+-- FIXME the following are incredibly stupid conversions which ignore tag
69+-- and style information.
70+instance ConvertSuccess Yaml Scalar where
71+ convertSuccess = Text . convertSuccess
72+instance ConvertSuccess Scalar Yaml where
73+ convertSuccess s = convertSuccess (convertSuccess s :: Text)
74+
6175type YamlObject = Object Yaml Yaml
6276
6377data YamlException =
@@ -146,3 +160,8 @@ instance ConvertSuccess (Object Yaml Yaml) (Object Text Text) where
146160 convertSuccess = mapKeysValues convertSuccess convertSuccess
147161instance ConvertSuccess (Object Text Text) (Object Yaml Yaml) where
148162 convertSuccess = mapKeysValues convertSuccess convertSuccess
163+
164+instance ConvertSuccess (Object Yaml Yaml) (Object String Scalar) where
165+ convertSuccess = mapKeysValues convertSuccess convertSuccess
166+instance ConvertSuccess (Object String Scalar) (Object Yaml Yaml) where
167+ convertSuccess = mapKeysValues convertSuccess convertSuccess
Text/Yaml.hs+36−1
@@ -33,6 +33,12 @@ module Text.Yaml
3333 , encodeText
3434 , decodeText
3535 , decodeTextSuccess
36+ -- * Converting to/from 'ScalarObject's
37+ , encodeScalar'
38+ , decodeScalar'
39+ , encodeScalar
40+ , decodeScalar
41+ , decodeScalarSuccess
3642#if TEST
3743 , testSuite
3844#endif
@@ -41,12 +47,13 @@ module Text.Yaml
4147import Prelude hiding (readList)
4248import Text.Libyaml
4349import Data.ByteString (ByteString)
44−import Data.Object.Text
4550import System.IO.Unsafe
4651import Control.Monad (join)
4752import Data.Convertible.Text
4853import Data.Attempt
4954
55+import Data.Object.Text
56+import Data.Object.Scalar
5057import Data.Object.Yaml
5158
5259#if TEST
@@ -130,6 +137,34 @@ decodeTextSuccess :: ( MonadFailure YamlException m
130137 -> m x
131138decodeTextSuccess = fmap convertSuccess . decodeText'
132139
140+-- ScalarObjects
141+encodeScalar' :: ScalarObject -> ByteString
142+encodeScalar' = encodeYaml
143+
144+decodeScalar' :: MonadFailure YamlException m
145+ => ByteString
146+ -> m ScalarObject
147+decodeScalar' = decodeYamlSuccess
148+
149+-- ScalarObject conversions
150+encodeScalar :: ConvertSuccess x ScalarObject => x -> ByteString
151+encodeScalar = encodeScalar' . convertSuccess
152+
153+decodeScalar :: ( MonadFailure YamlException m
154+ , ConvertAttempt ScalarObject x
155+ , Failure ConversionException m
156+ )
157+ => ByteString
158+ -> m x
159+decodeScalar bs = decodeScalar' bs >>= convertAttemptWrap
160+
161+decodeScalarSuccess :: ( MonadFailure YamlException m
162+ , ConvertSuccess ScalarObject x
163+ )
164+ => ByteString
165+ -> m x
166+decodeScalarSuccess = fmap convertSuccess . decodeScalar'
167+
133168#if TEST
134169newtype MyString = MyString String
135170 deriving (Eq, Show)