{-# OPTIONS_GHC -Wall #-}
{-# LANGUAGE FlexibleInstances #-}

module Data.Stringz.ByteString where

import Control.Lens
import qualified Data.ByteString.Char8 as ByteStringChar8
import qualified Data.ByteString.Lazy.Char8 as ByteStringLazyChar8
import qualified Data.Text as Text
import qualified Data.Text.Lazy as LazyText

class HasByteString a where
  byteString ::
    Lens' a ByteStringChar8.ByteString

instance HasByteString [Char] where
  byteString :: Lens' [Char] ByteString
byteString =
    ([Char] -> ByteString)
-> (ByteString -> [Char])
-> Iso [Char] [Char] ByteString ByteString
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso
      [Char] -> ByteString
ByteStringChar8.pack
      ByteString -> [Char]
ByteStringChar8.unpack

instance HasByteString Text.Text where
  byteString :: Lens' Text ByteString
byteString =
    (Text -> [Char]) -> ([Char] -> Text) -> Iso Text Text [Char] [Char]
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso Text -> [Char]
Text.unpack [Char] -> Text
Text.pack (([Char] -> f [Char]) -> Text -> f Text)
-> ((ByteString -> f ByteString) -> [Char] -> f [Char])
-> (ByteString -> f ByteString)
-> Text
-> f Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char] -> ByteString)
-> (ByteString -> [Char])
-> Iso [Char] [Char] ByteString ByteString
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso [Char] -> ByteString
ByteStringChar8.pack ByteString -> [Char]
ByteStringChar8.unpack

instance HasByteString LazyText.Text where
  byteString :: Lens' Text ByteString
byteString =
    (Text -> [Char]) -> ([Char] -> Text) -> Iso Text Text [Char] [Char]
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso Text -> [Char]
LazyText.unpack [Char] -> Text
LazyText.pack (([Char] -> f [Char]) -> Text -> f Text)
-> ((ByteString -> f ByteString) -> [Char] -> f [Char])
-> (ByteString -> f ByteString)
-> Text
-> f Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char] -> ByteString)
-> (ByteString -> [Char])
-> Iso [Char] [Char] ByteString ByteString
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso [Char] -> ByteString
ByteStringChar8.pack ByteString -> [Char]
ByteStringChar8.unpack

instance HasByteString ByteStringChar8.ByteString where
  byteString :: Lens' ByteString ByteString
byteString =
    (ByteString -> f ByteString) -> ByteString -> f ByteString
forall a. a -> a
id

instance HasByteString ByteStringLazyChar8.ByteString where
  byteString :: Lens' ByteString ByteString
byteString =
    (ByteString -> ByteString)
-> (ByteString -> ByteString)
-> Iso ByteString ByteString ByteString ByteString
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso ByteString -> ByteString
ByteStringLazyChar8.toStrict ByteString -> ByteString
ByteStringLazyChar8.fromStrict

instance HasByteString a => HasByteString (Identity a) where
  byteString :: Lens' (Identity a) ByteString
byteString =
    (Identity a -> a)
-> (a -> Identity a) -> Iso (Identity a) (Identity a) a a
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso Identity a -> a
forall a. Identity a -> a
runIdentity a -> Identity a
forall a. a -> Identity a
Identity ((a -> f a) -> Identity a -> f (Identity a))
-> ((ByteString -> f ByteString) -> a -> f a)
-> (ByteString -> f ByteString)
-> Identity a
-> f (Identity a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ByteString -> f ByteString) -> a -> f a
forall a. HasByteString a => Lens' a ByteString
Lens' a ByteString
byteString

instance HasByteString a => HasByteString (Const a b) where
  byteString :: Lens' (Const a b) ByteString
byteString =
    (Const a b -> a)
-> (a -> Const a b) -> Iso (Const a b) (Const a b) a a
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso Const a b -> a
forall {k} a (b :: k). Const a b -> a
getConst a -> Const a b
forall {k} a (b :: k). a -> Const a b
Const ((a -> f a) -> Const a b -> f (Const a b))
-> ((ByteString -> f ByteString) -> a -> f a)
-> (ByteString -> f ByteString)
-> Const a b
-> f (Const a b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ByteString -> f ByteString) -> a -> f a
forall a. HasByteString a => Lens' a ByteString
Lens' a ByteString
byteString

class HasLazyByteString a where
  lazyByteString ::
    Lens' a ByteStringLazyChar8.ByteString

instance HasLazyByteString [Char] where
  lazyByteString :: Lens' [Char] ByteString
lazyByteString =
    ([Char] -> ByteString)
-> (ByteString -> [Char])
-> Iso [Char] [Char] ByteString ByteString
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso
      [Char] -> ByteString
ByteStringLazyChar8.pack
      ByteString -> [Char]
ByteStringLazyChar8.unpack

instance HasLazyByteString Text.Text where
  lazyByteString :: Lens' Text ByteString
lazyByteString =
    (Text -> [Char]) -> ([Char] -> Text) -> Iso Text Text [Char] [Char]
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso Text -> [Char]
Text.unpack [Char] -> Text
Text.pack (([Char] -> f [Char]) -> Text -> f Text)
-> ((ByteString -> f ByteString) -> [Char] -> f [Char])
-> (ByteString -> f ByteString)
-> Text
-> f Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char] -> ByteString)
-> (ByteString -> [Char])
-> Iso [Char] [Char] ByteString ByteString
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso [Char] -> ByteString
ByteStringLazyChar8.pack ByteString -> [Char]
ByteStringLazyChar8.unpack

instance HasLazyByteString LazyText.Text where
  lazyByteString :: Lens' Text ByteString
lazyByteString =
    (Text -> [Char]) -> ([Char] -> Text) -> Iso Text Text [Char] [Char]
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso Text -> [Char]
LazyText.unpack [Char] -> Text
LazyText.pack (([Char] -> f [Char]) -> Text -> f Text)
-> ((ByteString -> f ByteString) -> [Char] -> f [Char])
-> (ByteString -> f ByteString)
-> Text
-> f Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char] -> ByteString)
-> (ByteString -> [Char])
-> Iso [Char] [Char] ByteString ByteString
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso [Char] -> ByteString
ByteStringLazyChar8.pack ByteString -> [Char]
ByteStringLazyChar8.unpack

instance HasLazyByteString ByteStringChar8.ByteString where
  lazyByteString :: Lens' ByteString ByteString
lazyByteString =
    (ByteString -> ByteString)
-> (ByteString -> ByteString)
-> Iso ByteString ByteString ByteString ByteString
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso ByteString -> ByteString
ByteStringChar8.fromStrict ByteString -> ByteString
ByteStringChar8.toStrict

instance HasLazyByteString ByteStringLazyChar8.ByteString where
  lazyByteString :: Lens' ByteString ByteString
lazyByteString =
    (ByteString -> f ByteString) -> ByteString -> f ByteString
forall a. a -> a
id

instance HasLazyByteString a => HasLazyByteString (Identity a) where
  lazyByteString :: Lens' (Identity a) ByteString
lazyByteString =
    (Identity a -> a)
-> (a -> Identity a) -> Iso (Identity a) (Identity a) a a
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso Identity a -> a
forall a. Identity a -> a
runIdentity a -> Identity a
forall a. a -> Identity a
Identity ((a -> f a) -> Identity a -> f (Identity a))
-> ((ByteString -> f ByteString) -> a -> f a)
-> (ByteString -> f ByteString)
-> Identity a
-> f (Identity a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ByteString -> f ByteString) -> a -> f a
forall a. HasLazyByteString a => Lens' a ByteString
Lens' a ByteString
lazyByteString

instance HasLazyByteString a => HasLazyByteString (Const a b) where
  lazyByteString :: Lens' (Const a b) ByteString
lazyByteString =
    (Const a b -> a)
-> (a -> Const a b) -> Iso (Const a b) (Const a b) a a
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso Const a b -> a
forall {k} a (b :: k). Const a b -> a
getConst a -> Const a b
forall {k} a (b :: k). a -> Const a b
Const ((a -> f a) -> Const a b -> f (Const a b))
-> ((ByteString -> f ByteString) -> a -> f a)
-> (ByteString -> f ByteString)
-> Const a b
-> f (Const a b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ByteString -> f ByteString) -> a -> f a
forall a. HasLazyByteString a => Lens' a ByteString
Lens' a ByteString
lazyByteString

class AsByteString a where
  _ByteString ::
    Prism' a ByteStringChar8.ByteString

instance AsByteString [Char] where
  _ByteString :: Prism' [Char] ByteString
_ByteString =
    ([Char] -> ByteString)
-> (ByteString -> [Char])
-> Iso [Char] [Char] ByteString ByteString
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso
      [Char] -> ByteString
ByteStringChar8.pack
      ByteString -> [Char]
ByteStringChar8.unpack

instance AsByteString Text.Text where
  _ByteString :: Prism' Text ByteString
_ByteString =
    (Text -> [Char]) -> ([Char] -> Text) -> Iso Text Text [Char] [Char]
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso Text -> [Char]
Text.unpack [Char] -> Text
Text.pack (p [Char] (f [Char]) -> p Text (f Text))
-> (p ByteString (f ByteString) -> p [Char] (f [Char]))
-> p ByteString (f ByteString)
-> p Text (f Text)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p ByteString (f ByteString) -> p [Char] (f [Char])
forall a. AsByteString a => Prism' a ByteString
Prism' [Char] ByteString
_ByteString

instance AsByteString LazyText.Text where
  _ByteString :: Prism' Text ByteString
_ByteString =
    (Text -> [Char]) -> ([Char] -> Text) -> Iso Text Text [Char] [Char]
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso Text -> [Char]
LazyText.unpack [Char] -> Text
LazyText.pack (p [Char] (f [Char]) -> p Text (f Text))
-> (p ByteString (f ByteString) -> p [Char] (f [Char]))
-> p ByteString (f ByteString)
-> p Text (f Text)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p ByteString (f ByteString) -> p [Char] (f [Char])
forall a. AsByteString a => Prism' a ByteString
Prism' [Char] ByteString
_ByteString

instance AsByteString ByteStringChar8.ByteString where
  _ByteString :: Prism' ByteString ByteString
_ByteString =
    p ByteString (f ByteString) -> p ByteString (f ByteString)
forall a. a -> a
id

instance AsByteString ByteStringLazyChar8.ByteString where
  _ByteString :: Prism' ByteString ByteString
_ByteString =
    (ByteString -> ByteString)
-> (ByteString -> ByteString)
-> Iso ByteString ByteString ByteString ByteString
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso ByteString -> ByteString
ByteStringLazyChar8.toStrict ByteString -> ByteString
ByteStringLazyChar8.fromStrict

instance AsByteString a => AsByteString (Identity a) where
  _ByteString :: Prism' (Identity a) ByteString
_ByteString =
    (Identity a -> a)
-> (a -> Identity a) -> Iso (Identity a) (Identity a) a a
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso Identity a -> a
forall a. Identity a -> a
runIdentity a -> Identity a
forall a. a -> Identity a
Identity (p a (f a) -> p (Identity a) (f (Identity a)))
-> (p ByteString (f ByteString) -> p a (f a))
-> p ByteString (f ByteString)
-> p (Identity a) (f (Identity a))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p ByteString (f ByteString) -> p a (f a)
forall a. AsByteString a => Prism' a ByteString
Prism' a ByteString
_ByteString

instance AsByteString a => AsByteString (Const a b) where
  _ByteString :: Prism' (Const a b) ByteString
_ByteString =
    (Const a b -> a)
-> (a -> Const a b) -> Iso (Const a b) (Const a b) a a
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso Const a b -> a
forall {k} a (b :: k). Const a b -> a
getConst a -> Const a b
forall {k} a (b :: k). a -> Const a b
Const (p a (f a) -> p (Const a b) (f (Const a b)))
-> (p ByteString (f ByteString) -> p a (f a))
-> p ByteString (f ByteString)
-> p (Const a b) (f (Const a b))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p ByteString (f ByteString) -> p a (f a)
forall a. AsByteString a => Prism' a ByteString
Prism' a ByteString
_ByteString

class AsLazyByteString a where
  _LazyByteString ::
    Prism' a ByteStringLazyChar8.ByteString

instance AsLazyByteString [Char] where
  _LazyByteString :: Prism' [Char] ByteString
_LazyByteString =
    ([Char] -> ByteString)
-> (ByteString -> [Char])
-> Iso [Char] [Char] ByteString ByteString
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso
      [Char] -> ByteString
ByteStringLazyChar8.pack
      ByteString -> [Char]
ByteStringLazyChar8.unpack

instance AsLazyByteString Text.Text where
  _LazyByteString :: Prism' Text ByteString
_LazyByteString =
    (Text -> [Char]) -> ([Char] -> Text) -> Iso Text Text [Char] [Char]
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso Text -> [Char]
Text.unpack [Char] -> Text
Text.pack (p [Char] (f [Char]) -> p Text (f Text))
-> (p ByteString (f ByteString) -> p [Char] (f [Char]))
-> p ByteString (f ByteString)
-> p Text (f Text)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p ByteString (f ByteString) -> p [Char] (f [Char])
forall a. AsLazyByteString a => Prism' a ByteString
Prism' [Char] ByteString
_LazyByteString

instance AsLazyByteString LazyText.Text where
  _LazyByteString :: Prism' Text ByteString
_LazyByteString =
    (Text -> [Char]) -> ([Char] -> Text) -> Iso Text Text [Char] [Char]
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso Text -> [Char]
LazyText.unpack [Char] -> Text
LazyText.pack (p [Char] (f [Char]) -> p Text (f Text))
-> (p ByteString (f ByteString) -> p [Char] (f [Char]))
-> p ByteString (f ByteString)
-> p Text (f Text)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p ByteString (f ByteString) -> p [Char] (f [Char])
forall a. AsLazyByteString a => Prism' a ByteString
Prism' [Char] ByteString
_LazyByteString

instance AsLazyByteString ByteStringChar8.ByteString where
  _LazyByteString :: Prism' ByteString ByteString
_LazyByteString =
    (ByteString -> ByteString)
-> (ByteString -> ByteString)
-> Iso ByteString ByteString ByteString ByteString
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso ByteString -> ByteString
ByteStringLazyChar8.fromStrict ByteString -> ByteString
ByteStringLazyChar8.toStrict

instance AsLazyByteString ByteStringLazyChar8.ByteString where
  _LazyByteString :: Prism' ByteString ByteString
_LazyByteString =
    p ByteString (f ByteString) -> p ByteString (f ByteString)
forall a. a -> a
id

instance AsLazyByteString a => AsLazyByteString (Identity a) where
  _LazyByteString :: Prism' (Identity a) ByteString
_LazyByteString =
    (Identity a -> a)
-> (a -> Identity a) -> Iso (Identity a) (Identity a) a a
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso Identity a -> a
forall a. Identity a -> a
runIdentity a -> Identity a
forall a. a -> Identity a
Identity (p a (f a) -> p (Identity a) (f (Identity a)))
-> (p ByteString (f ByteString) -> p a (f a))
-> p ByteString (f ByteString)
-> p (Identity a) (f (Identity a))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p ByteString (f ByteString) -> p a (f a)
forall a. AsLazyByteString a => Prism' a ByteString
Prism' a ByteString
_LazyByteString

instance AsLazyByteString a => AsLazyByteString (Const a b) where
  _LazyByteString :: Prism' (Const a b) ByteString
_LazyByteString =
    (Const a b -> a)
-> (a -> Const a b) -> Iso (Const a b) (Const a b) a a
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso Const a b -> a
forall {k} a (b :: k). Const a b -> a
getConst a -> Const a b
forall {k} a (b :: k). a -> Const a b
Const (p a (f a) -> p (Const a b) (f (Const a b)))
-> (p ByteString (f ByteString) -> p a (f a))
-> p ByteString (f ByteString)
-> p (Const a b) (f (Const a b))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p ByteString (f ByteString) -> p a (f a)
forall a. AsLazyByteString a => Prism' a ByteString
Prism' a ByteString
_LazyByteString