{-# LANGUAGE OverloadedStrings #-} module Data.SMILES.Atom.Writer (writeAtom) where import Data.Text (Text, pack) import Data.SMILES.Atom writeChirality :: Chirality -> String writeChirality Clockwise = "@@" writeChirality AntiClockwise = "@" writeChirality c = '@':show c writeHs :: Int -> String writeHs 0 = "" writeHs 1 = "H" writeHs n = "H" ++ show n writeCharge :: Int -> String writeCharge 0 = "" writeCharge (-1) = "-" writeCharge 1 = "+" writeCharge n = show n writeClass :: Int -> String writeClass n = ":" ++ show n writeAtom :: Atom -> Text writeAtom (BracketAtom Bracket { bracketSymbol=sym , bracketIsotope=iso , bracketChirality=chi , bracketHCount=hs , bracketCharge=ch , bracketClass=cls }) = pack $ "[" ++ maybe "" show iso ++ show sym ++ maybe "" writeChirality chi ++ maybe "" writeHs hs ++ maybe "" writeCharge ch ++ maybe "" writeClass cls ++ "]" writeAtom (SimpleAtom sym) = pack $ show sym