module SwiftNav.SBP.TH where
import BasicPrelude
import Control.Lens
import Data.Binary
import Data.ByteString
import Data.ByteString.Lazy hiding ( ByteString )
import Data.Word
import Language.Haskell.TH
import SwiftNav.SBP.Types
deriveSBP :: Name -> Name -> Q [Dec]
deriveSBP msgType name = [d|instance ToSBP $(conT name) where
toSBP msg senderID = encoded & msgSBPCrc .~ checkCrc encoded
where
payload = toStrict $ encode msg
len = fromIntegral $ Data.ByteString.length payload
encoded = Msg $(varE msgType) senderID len payload 0
|]