module LDAPv3.StringRepr
( StringRepr ( asParsec
, asBuilder
, renderShortText
)
, renderText
, renderString
, parseShortText
, parseText
, parseString
, DistinguishedName(DistinguishedName)
, rfc4514coreAttributes
) where
import Common hiding (Option, many, option, some, (<|>))
import qualified Data.Text.Short as TS
import Text.Parsec as P
import LDAPv3.AttributeDescription ()
import LDAPv3.DistinguishedName (DistinguishedName (..), rfc4514coreAttributes)
import LDAPv3.SearchFilter ()
import LDAPv3.StringRepr.Class
renderText :: StringRepr a => a -> Text
renderText :: a -> Text
renderText = ShortText -> Text
TS.toText (ShortText -> Text) -> (a -> ShortText) -> a -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> ShortText
forall a. StringRepr a => a -> ShortText
renderShortText
renderString :: StringRepr a => a -> String
renderString :: a -> String
renderString = ShortText -> String
TS.toString (ShortText -> String) -> (a -> ShortText) -> a -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> ShortText
forall a. StringRepr a => a -> ShortText
renderShortText
parseText :: StringRepr a => Text -> Maybe a
parseText :: Text -> Maybe a
parseText = (ParseError -> Maybe a)
-> (a -> Maybe a) -> Either ParseError a -> Maybe a
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (Maybe a -> ParseError -> Maybe a
forall a b. a -> b -> a
const Maybe a
forall a. Maybe a
Nothing) a -> Maybe a
forall a. a -> Maybe a
Just (Either ParseError a -> Maybe a)
-> (Text -> Either ParseError a) -> Text -> Maybe a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Parsec Text () a -> String -> Text -> Either ParseError a
forall s t a.
Stream s Identity t =>
Parsec s () a -> String -> s -> Either ParseError a
parse (Parsec Text () a
forall a s. (StringRepr a, Stream s Identity Char) => Parsec s () a
asParsec Parsec Text () a -> ParsecT Text () Identity () -> Parsec Text () a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ParsecT Text () Identity ()
forall s (m :: * -> *) t u.
(Stream s m t, Show t) =>
ParsecT s u m ()
eof) ""
parseShortText :: StringRepr a => ShortText -> Maybe a
parseShortText :: ShortText -> Maybe a
parseShortText = (ParseError -> Maybe a)
-> (a -> Maybe a) -> Either ParseError a -> Maybe a
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (Maybe a -> ParseError -> Maybe a
forall a b. a -> b -> a
const Maybe a
forall a. Maybe a
Nothing) a -> Maybe a
forall a. a -> Maybe a
Just (Either ParseError a -> Maybe a)
-> (ShortText -> Either ParseError a) -> ShortText -> Maybe a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Parsec String () a -> String -> String -> Either ParseError a
forall s t a.
Stream s Identity t =>
Parsec s () a -> String -> s -> Either ParseError a
parse (Parsec String () a
forall a s. (StringRepr a, Stream s Identity Char) => Parsec s () a
asParsec Parsec String () a
-> ParsecT String () Identity () -> Parsec String () a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ParsecT String () Identity ()
forall s (m :: * -> *) t u.
(Stream s m t, Show t) =>
ParsecT s u m ()
eof) "" (String -> Either ParseError a)
-> (ShortText -> String) -> ShortText -> Either ParseError a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShortText -> String
TS.toString
parseString :: StringRepr a => String -> Maybe a
parseString :: String -> Maybe a
parseString = (ParseError -> Maybe a)
-> (a -> Maybe a) -> Either ParseError a -> Maybe a
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (Maybe a -> ParseError -> Maybe a
forall a b. a -> b -> a
const Maybe a
forall a. Maybe a
Nothing) a -> Maybe a
forall a. a -> Maybe a
Just (Either ParseError a -> Maybe a)
-> (String -> Either ParseError a) -> String -> Maybe a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Parsec String () a -> String -> String -> Either ParseError a
forall s t a.
Stream s Identity t =>
Parsec s () a -> String -> s -> Either ParseError a
parse (Parsec String () a
forall a s. (StringRepr a, Stream s Identity Char) => Parsec s () a
asParsec Parsec String () a
-> ParsecT String () Identity () -> Parsec String () a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ParsecT String () Identity ()
forall s (m :: * -> *) t u.
(Stream s m t, Show t) =>
ParsecT s u m ()
eof) ""