qrcode-core-0.8.0: src/Codec/QRCode/Mode/Automatic.hs
{-# LANGUAGE NoImplicitPrelude #-}
module Codec.QRCode.Mode.Automatic
( automatic
) where
import Codec.QRCode.Base
import Codec.QRCode.Data.QRSegment.Internal
import Codec.QRCode.Data.Result
import Codec.QRCode.Data.TextEncoding
import Codec.QRCode.Data.ToInput
import Codec.QRCode.Mode.Alphanumeric
import Codec.QRCode.Mode.Byte
import Codec.QRCode.Mode.Kanji
import Codec.QRCode.Mode.Numeric
-- | Encode a whole string using the mode with the shortest result.
-- Will pick either `numeric`, `alphanumeric`, `kanji` or `text` based on the contents.
--
-- Please refer to the specific documentations for details.
automatic :: ToText a => TextEncoding -> a -> Result QRSegment
automatic te s = numeric s' <|> alphanumeric s' <|> kanji s' <|> text te s
where
s' :: [Char]
s' = toString s