@@ -196,15 +196,19 @@ makeLenses ''MandrillMetadata
196deriveJSON defaultOptions { fieldLabelModifier = drop 6 } ''MandrillMetadata
196deriveJSON defaultOptions { fieldLabelModifier = drop 6 } ''MandrillMetadata
199−newtype Base64ByteString = B64BS B.ByteString deriving Show
199+data Base64ByteString =
200+ EncodedB64BS B.ByteString
201+ -- ^ An already-encoded Base64 ByteString.
202+ | PlainBS B.ByteString
203+ -- ^ A plain Base64 ByteString which requires encoding.
201instance ToJSON Base64ByteString where
206instance ToJSON Base64ByteString where
202− toJSON (B64BS bs) = String . TL.decodeUtf8 . Base64.encode $ bs
207+ toJSON (PlainBS bs) = String . TL.decodeUtf8 . Base64.encode $ bs
208+ toJSON (EncodedB64BS bs) = String . TL.decodeUtf8 $ bs
204instance FromJSON Base64ByteString where
210instance FromJSON Base64ByteString where
205− parseJSON (String v) = case Base64.decode (TL.encodeUtf8 v) of
211+ parseJSON (String v) = pure $ EncodedB64BS (TL.encodeUtf8 v)
206− Left err -> fail err
207− Right rs -> return $ B64BS rs
208 parseJSON rest = typeMismatch "Base64ByteString must be a String." rest
212 parseJSON rest = typeMismatch "Base64ByteString must be a String." rest
210--------------------------------------------------------------------------------
214--------------------------------------------------------------------------------