binrep-0.2.0: src/Data/Aeson/Extra/SizedVector.hs
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Data.Aeson.Extra.SizedVector where
import Data.Aeson
import Data.Vector.Generic.Sized.Internal qualified as VSI
import Data.Vector.Generic.Sized qualified as VS
import Data.Vector.Generic qualified as V
import GHC.TypeNats ( KnownNat )
instance ToJSON (v a) => ToJSON (VSI.Vector v n a) where
toJSON (VSI.Vector v) = toJSON v
toEncoding (VSI.Vector v) = toEncoding v
instance (FromJSON (v a), KnownNat n, V.Vector v a) => FromJSON (VSI.Vector v n a) where
parseJSON j = do
v <- parseJSON j
case VS.toSized v of
Nothing -> fail "TODO bad size"
Just v' -> return v'