module Iri.Optics.Defs
where
import Iri.Prelude
import Iri.Data
import Iri.Optics.Basics
import qualified Iri.Rendering.ByteString as A
import qualified Iri.Parsing.ByteString as B
import qualified Iri.Rendering.Text as C
import qualified Iri.Parsing.Text as D
import qualified Data.Text.Encoding as Text
textIriIri :: Prism' Text Iri
textIriIri =
prism C.iri (\ text -> either (const (Left text)) Right (D.iri text))
textIriHttpIri :: Prism' Text HttpIri
textIriHttpIri =
textIriIri . iriHttpIri
byteStringIri :: Prism' ByteString Iri
byteStringIri =
prism A.uri (\ bytes -> either (const (Left bytes)) Right (B.uri bytes))
byteStringHttpIri :: Prism' ByteString HttpIri
byteStringHttpIri =
byteStringIri . iriHttpIri
byteStringTextInUtf8 :: Prism' ByteString Text
byteStringTextInUtf8 = prism' Text.encodeUtf8 (either (const Nothing) Just . Text.decodeUtf8')
iriHttpIri :: Prism' Iri HttpIri
iriHttpIri = prism' iriFromHttpIri (either (const Nothing) Just . httpIriFromIri)
iriScheme :: Lens' Iri Scheme
iriScheme = lens (\ (Iri x _ _ _) -> x) (\ (Iri _ hierarchy query fragment) x -> Iri x hierarchy query fragment)
iriHierarchy :: Lens' Iri Hierarchy
iriHierarchy = lens (\ (Iri _ x _ _) -> x) (\ (Iri scheme _ query fragment) x -> Iri scheme x query fragment)
iriQuery :: Lens' Iri Query
iriQuery = lens (\ (Iri _ _ x _) -> x) (\ (Iri scheme hierarchy _ fragment) x -> Iri scheme hierarchy x fragment)
iriFragment :: Lens' Iri Fragment
iriFragment = lens (\ (Iri _ _ _ x) -> x) (\ (Iri scheme hierarchy query _) x -> Iri scheme hierarchy query x)
schemeByteString :: Lens' Scheme ByteString
schemeByteString = lens (\ (Scheme x) -> x) (const Scheme)
fragmentByteString :: Lens' Fragment ByteString
fragmentByteString = lens (\ (Fragment x) -> x) (const Fragment)