on master help sign in
Added preliminary scalar support
9c4fe54Michael Snoyman
Data/Object/Yaml.hs+19
@@ -18,6 +18,7 @@ module Data.Object.Yaml
18import Data.ByteString (ByteString)
18import Data.ByteString (ByteString)
19import Data.Object
19import Data.Object
20import Data.Object.Text
20import Data.Object.Text
21+import Data.Object.Scalar
21import Data.Convertible.Text
22import Data.Convertible.Text
22import Data.Attempt
23import Data.Attempt
23
24
@@ -53,11 +54,24 @@ data Yaml = Yaml
53 }
54 }
54instance ConvertSuccess Yaml Event where
55instance ConvertSuccess Yaml Event where
55 convertSuccess (Yaml v t s) = EventScalar v (convertSuccess t) s
56 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+
56instance ConvertSuccess Yaml Text where
63instance ConvertSuccess Yaml Text where
57 convertSuccess = convertSuccess . value
64 convertSuccess = convertSuccess . value
58instance ConvertSuccess Text Yaml where
65instance ConvertSuccess Text Yaml where
59 convertSuccess t = Yaml (convertSuccess t) "" Any
66 convertSuccess t = Yaml (convertSuccess t) "" Any
60
67
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+
61type YamlObject = Object Yaml Yaml
75type YamlObject = Object Yaml Yaml
62
76
63data YamlException =
77data YamlException =
@@ -146,3 +160,8 @@ instance ConvertSuccess (Object Yaml Yaml) (Object Text Text) where
146 convertSuccess = mapKeysValues convertSuccess convertSuccess
160 convertSuccess = mapKeysValues convertSuccess convertSuccess
147instance ConvertSuccess (Object Text Text) (Object Yaml Yaml) where
161instance ConvertSuccess (Object Text Text) (Object Yaml Yaml) where
148 convertSuccess = mapKeysValues convertSuccess convertSuccess
162 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
33 , encodeText
33 , encodeText
34 , decodeText
34 , decodeText
35 , decodeTextSuccess
35 , decodeTextSuccess
36+ -- * Converting to/from 'ScalarObject's
37+ , encodeScalar'
38+ , decodeScalar'
39+ , encodeScalar
40+ , decodeScalar
41+ , decodeScalarSuccess
36#if TEST
42#if TEST
37 , testSuite
43 , testSuite
38#endif
44#endif
@@ -41,12 +47,13 @@ module Text.Yaml
41import Prelude hiding (readList)
47import Prelude hiding (readList)
42import Text.Libyaml
48import Text.Libyaml
43import Data.ByteString (ByteString)
49import Data.ByteString (ByteString)
44−import Data.Object.Text
45import System.IO.Unsafe
50import System.IO.Unsafe
46import Control.Monad (join)
51import Control.Monad (join)
47import Data.Convertible.Text
52import Data.Convertible.Text
48import Data.Attempt
53import Data.Attempt
49
54
55+import Data.Object.Text
56+import Data.Object.Scalar
50import Data.Object.Yaml
57import Data.Object.Yaml
51
58
52#if TEST
59#if TEST
@@ -130,6 +137,34 @@ decodeTextSuccess :: ( MonadFailure YamlException m
130 -> m x
137 -> m x
131decodeTextSuccess = fmap convertSuccess . decodeText'
138decodeTextSuccess = fmap convertSuccess . decodeText'
132
139
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+
133#if TEST
168#if TEST
134newtype MyString = MyString String
169newtype MyString = MyString String
135 deriving (Eq, Show)
170 deriving (Eq, Show)