module Ham.CAT.Parser where
import Ham.Internal.Data
import qualified Data.ByteString.Char8 as B
import Data.Attoparsec.ByteString.Char8
parseFrequency :: B.ByteString -> Maybe Frequency
parseFrequency a = case r of
Done s r' -> Just $ MHz $ realToFrac $ r' * 1e-6
_ -> Nothing
where r = parse (doubleFromAnswer (B.pack "FA")) a
frequencyFromAnswer :: B.ByteString
-> Parser Frequency
frequencyFromAnswer prefix = do
string prefix
v <- double
char ';'
return $ MHz $ realToFrac $ v * 1e-6
doubleFromAnswer :: B.ByteString
-> Parser Double
doubleFromAnswer prefix = string prefix *> double <* char ';'
intFromAnswer :: B.ByteString
-> Parser Int
intFromAnswer prefix = string prefix *> decimal <* char ';'