/
Base64.purs
37 lines (27 loc) · 1.2 KB
/
Base64.purs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
module Data.Base64
( encodeBase64
, decodeBase64
, runBase64
, Base64(..)
) where
import Prelude ((<<<), class Show, class Eq, (<>))
import Data.Maybe (Maybe(..))
import Data.ArrayBuffer.Types(ArrayBuffer)
import Data.Function.Uncurried (Fn3, runFn3)
-- | A boxed Base64 type to prevent accidental misuse
newtype Base64 = Base64 String
-- | Unbox a base64 and use the inner string
runBase64 :: Base64 -> String
runBase64 (Base64 s) = s
derive instance eqBase64 :: Eq Base64
-- | Show instance is for textual representations, not data representation
instance showBase64 :: Show Base64 where
show (Base64 s) = "Base64 (" <> s <> ")"
foreign import encodeBase64Impl :: ArrayBuffer -> String
-- | Encodes an ArrayBuffer into the base64 representation thereof
encodeBase64 :: ArrayBuffer -> Base64
encodeBase64 = Base64 <<< encodeBase64Impl
foreign import decodeBase64Impl :: Fn3 (ArrayBuffer -> Maybe ArrayBuffer) (Maybe ArrayBuffer) String (Maybe ArrayBuffer)
-- | Attempt to decode base64 content to the array buffer(byte) representation it stored internally.
decodeBase64 :: Base64 -> Maybe ArrayBuffer
decodeBase64 (Base64 content) = runFn3 decodeBase64Impl Just Nothing content