ron-hs-0.4.0: RON format implementation in haskell
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.Ron.Class

Description

Definition for ron conversion classes, and for using Generics to encode any datatype into RON.

Synopsis

Documentation

class ToRon a where Source #

A class of values that can be encoded to RON format.

There are several ways to define an instance:

  1. By producing a Value by hand
  2. By using toRonGeneric
  3. By DerivingVia extension and using RonWith

When using the second option, the encoding parameters are specified with RonSettings. With the third option, the same parameters are specified by a list of settings found in Deriving.

The default implementation uses generic encoding with laxRonSettings. You can use other settings like this:

     instance ToRon MyType where
         toRon = toRonGeneric strictRonSettings
             { encodeFlags = RonFlags
                 { implicitSome = True
                 , skipSingleConstructor = True
                 }
             }

Or like this:

     deriving via (RonWith '[UseStrict, EncodeWith SkipSingleConstructor, EncodeWith ImplicitSome])
         instance ToRon MyType

Minimal complete definition

Nothing

Methods

toRon :: a -> Value Source #

default toRon :: (Generic a, GToRon (Rep a)) => a -> Value Source #

Instances

Instances details
ToRon Int16 Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Int16 -> Value Source #

ToRon Int32 Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Int32 -> Value Source #

ToRon Int64 Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Int64 -> Value Source #

ToRon Int8 Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Int8 -> Value Source #

ToRon Word16 Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Word16 -> Value Source #

ToRon Word32 Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Word32 -> Value Source #

ToRon Word64 Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Word64 -> Value Source #

ToRon Word8 Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Word8 -> Value Source #

ToRon ByteString Source # 
Instance details

Defined in Data.Ron.Class

ToRon Scientific Source # 
Instance details

Defined in Data.Ron.Class

ToRon Text Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Text -> Value Source #

ToRon Integer Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Integer -> Value Source #

ToRon () Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: () -> Value Source #

ToRon Bool Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Bool -> Value Source #

ToRon Char Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Char -> Value Source #

ToRon Double Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Double -> Value Source #

ToRon Float Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Float -> Value Source #

ToRon Int Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Int -> Value Source #

ToRon Word Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Word -> Value Source #

ToRon a => ToRon (Complex a) Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Complex a -> Value Source #

ToRon a => ToRon (NonEmpty a) Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: NonEmpty a -> Value Source #

ToRon a => ToRon (Seq a) Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Seq a -> Value Source #

ToRon a => ToRon (Set a) Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Set a -> Value Source #

ToRon a => ToRon (Vector a) Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Vector a -> Value Source #

ToRon a => ToRon (Maybe a) Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Maybe a -> Value Source #

ToRon [Char] Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: [Char] -> Value Source #

ToRon a => ToRon [a] Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: [a] -> Value Source #

(ToRon a, ToRon b) => ToRon (Either a b) Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Either a b -> Value Source #

(ToRon k, ToRon v) => ToRon (Map k v) Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: Map k v -> Value Source #

(ToRon a1, ToRon a2) => ToRon (a1, a2) Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRon :: (a1, a2) -> Value Source #

(Generic a, GToRon (Rep a), ReflectSettingsList s) => ToRon (RonWith s a) Source # 
Instance details

Defined in Data.Ron.Class.Deriving

Methods

toRon :: RonWith s a -> Value Source #

class FromRon a where Source #

A class of values that can be restored from RON format

There are several ways to define an instance:

  1. By deconstructing a Value by hand and producing a value of your type
  2. By using fromRonGeneric
  3. By DerivingVia extension and using RonWith

The default implementation uses generic decoding with laxRonSettings. You can use other settings like this:

     instance FromRon MyType where
         fromRon = fromRonGeneric strictRonSettings
             { decodeFlags = RonFlags
                 { implicitSome = True
                 , skipSingleConstructor = True
                 }
             }

Or like this:

     deriving via (RonWith '[UseStrict, DecodeWith SkipSingleConstructor, DecodeWith ImplicitSome])
         instance FromRon MyType

Minimal complete definition

Nothing

Methods

fromRon :: Value -> ParseResult a Source #

default fromRon :: (Generic a, GFromRon (Rep a)) => Value -> ParseResult a Source #

Instances

Instances details
FromRon Int16 Source # 
Instance details

Defined in Data.Ron.Class

FromRon Int32 Source # 
Instance details

Defined in Data.Ron.Class

FromRon Int64 Source # 
Instance details

Defined in Data.Ron.Class

FromRon Int8 Source # 
Instance details

Defined in Data.Ron.Class

FromRon Word16 Source # 
Instance details

Defined in Data.Ron.Class

FromRon Word32 Source # 
Instance details

Defined in Data.Ron.Class

FromRon Word64 Source # 
Instance details

Defined in Data.Ron.Class

FromRon Word8 Source # 
Instance details

Defined in Data.Ron.Class

FromRon ByteString Source # 
Instance details

Defined in Data.Ron.Class

FromRon Scientific Source # 
Instance details

Defined in Data.Ron.Class

FromRon Text Source # 
Instance details

Defined in Data.Ron.Class

FromRon Integer Source # 
Instance details

Defined in Data.Ron.Class

FromRon () Source # 
Instance details

Defined in Data.Ron.Class

Methods

fromRon :: Value -> ParseResult () Source #

FromRon Bool Source # 
Instance details

Defined in Data.Ron.Class

FromRon Char Source # 
Instance details

Defined in Data.Ron.Class

FromRon Double Source # 
Instance details

Defined in Data.Ron.Class

FromRon Float Source # 
Instance details

Defined in Data.Ron.Class

FromRon Int Source # 
Instance details

Defined in Data.Ron.Class

FromRon Word Source # 
Instance details

Defined in Data.Ron.Class

(Num a, FromRon a) => FromRon (Complex a) Source # 
Instance details

Defined in Data.Ron.Class

FromRon a => FromRon (NonEmpty a) Source # 
Instance details

Defined in Data.Ron.Class

FromRon a => FromRon (Seq a) Source # 
Instance details

Defined in Data.Ron.Class

Methods

fromRon :: Value -> ParseResult (Seq a) Source #

(FromRon a, Ord a) => FromRon (Set a) Source # 
Instance details

Defined in Data.Ron.Class

Methods

fromRon :: Value -> ParseResult (Set a) Source #

FromRon a => FromRon (Vector a) Source # 
Instance details

Defined in Data.Ron.Class

Methods

fromRon :: Value -> ParseResult (Vector a) Source #

FromRon a => FromRon (Maybe a) Source # 
Instance details

Defined in Data.Ron.Class

FromRon [Char] Source # 
Instance details

Defined in Data.Ron.Class

FromRon a => FromRon [a] Source # 
Instance details

Defined in Data.Ron.Class

Methods

fromRon :: Value -> ParseResult [a] Source #

(FromRon a, FromRon b) => FromRon (Either a b) Source # 
Instance details

Defined in Data.Ron.Class

Methods

fromRon :: Value -> ParseResult (Either a b) Source #

(FromRon k, FromRon v, Ord k) => FromRon (Map k v) Source # 
Instance details

Defined in Data.Ron.Class

Methods

fromRon :: Value -> ParseResult (Map k v) Source #

(FromRon a1, FromRon a2) => FromRon (a1, a2) Source # 
Instance details

Defined in Data.Ron.Class

Methods

fromRon :: Value -> ParseResult (a1, a2) Source #

(Generic a, GFromRon (Rep a), ReflectSettingsList s) => FromRon (RonWith s a) Source # 
Instance details

Defined in Data.Ron.Class.Deriving

type ParseResult = Either String Source #

When decoding from ron, this type is used to indicate decode failure. During decoding, multiple failures may be concatenated with a semicolon, and for some functions the string will be thrown with DecodeError. When implementing your own decoding functions, you should put short one-sentence error descriptions.

For the next major release, we plan to replace it with a better mechanism that reports error locations and supports long-form content.

Settings for generic encoding

data RonSettings Source #

Settings for use with Generic RON encoding/decoding

Constructors

RonSettings 

Fields

data RonFlags Source #

Part of RonSettings that applies to both encoding and decoding, and separately

Constructors

RonFlags 

Fields

  • implicitSome :: !Bool

    Like ron-rs's implicit_some. When set to True, Nothing in record fields is represented by omission of the field

  • skipSingleConstructor :: !Bool

    When a datatype has a single constructor, encoding will omit it and decoding will ignore it missing, turning the representation into a tuple or an anonymous record.

Instances

Instances details
Show RonFlags Source # 
Instance details

Defined in Data.Ron.Class

Eq RonFlags Source # 
Instance details

Defined in Data.Ron.Class

strictRonSettings :: RonSettings Source #

Values are expected to exactly conform: all fields should have the same name, all constructors should be present, no Some omission

laxRonSettings :: RonSettings Source #

Relaxes strictRonSettings on constructor omission and implicitSome when decoding, but encodes in the same strict way

Generic encoding

toRonGeneric :: (Generic a, GToRon (Rep a)) => RonSettings -> a -> Value Source #

Encode ron using Generic instance and provided RonSettings.

With generic encoding sums are turned into sums, records into records, and multi-param constructors into tuples.

fromRonGeneric :: (Generic a, GFromRon (Rep a)) => RonSettings -> Value -> ParseResult a Source #

Decode ron using Generic instance and provided RonSettings

With generic encoding sums are turned into sums, records into records, and multi-param constructors into tuples.

class GToRon f Source #

Internal class for converting to Ron. You might need it if you're writing you own generic combinators

Minimal complete definition

toRonG

Instances

Instances details
(Datatype d, GToRonSum f) => GToRon (M1 D d f) Source # 
Instance details

Defined in Data.Ron.Class

Methods

toRonG :: RonSettings -> M1 D d f a -> Value

class GFromRon f Source #

Internal class for converting from Ron. You might need it if you're writing you own generic combinators

Minimal complete definition

fromRonG

Instances

Instances details
(Datatype d, GFromRonSum f) => GFromRon (M1 D d f) Source # 
Instance details

Defined in Data.Ron.Class

Methods

fromRonG :: RonSettings -> Value -> ParseResult (M1 D d f a)