module Data.SMILES.Bond.Parser where

import           Text.Megaparsec
import           Text.Megaparsec.Text

import           Data.SMILES.Bond

bondP :: Parser Bond
bondP = (AliphaticBond <$> aliphaticBondP) <|>
        (DoubleConfiguration <$> doubleConfigBondP) <|>
        aromaticBondP

doubleConfigBondP :: Parser DoubleConfiguration
doubleConfigBondP = (char '/' >> pure BelowBond) <|>
                    (char '\\' >> pure AboveBond)

aliphaticBondP :: Parser AliphaticBond
aliphaticBondP = single <|> double <|> triple <|> quadru
  where single = char '-' >> pure SingleBond
        double = char '=' >> pure DoubleBond
        triple = char '#' >> pure TripleBond
        quadru = char '$' >> pure QuadrupleBond

aromaticBondP :: Parser Bond
aromaticBondP = char ':' >> pure AromaticBond